C# WPF选项卡项标题中的文本框可见性未更改
我已经为TabItem创建了一个样式。双击tabItem header时,会显示一个文本框,以便编辑标题文本 我想在选项卡选择被更改或选项卡失去焦点时隐藏该文本框,因此当IsSelected为false或SelectionChanged事件被触发但其不起作用时,我将可见性设置为falseC# WPF选项卡项标题中的文本框可见性未更改,c#,wpf,xaml,C#,Wpf,Xaml,我已经为TabItem创建了一个样式。双击tabItem header时,会显示一个文本框,以便编辑标题文本 我想在选项卡选择被更改或选项卡失去焦点时隐藏该文本框,因此当IsSelected为false或SelectionChanged事件被触发但其不起作用时,我将可见性设置为false <Trigger Property="IsSelected" Value="false"> <Setter Property="Visibility" Value="{x:Static
<Trigger Property="IsSelected" Value="false">
<Setter Property="Visibility" Value="{x:Static Visibility.Collapsed}" TargetName="tabHeaderEdit" />
<Setter Property="Visibility" Value="{x:Static Visibility.Visible}" TargetName="tabHeaderPresenter" />
<Setter TargetName="tabDockPanel" Property="Background" Value="#FFC9C7BA" />
</Trigger>
<EventTrigger RoutedEvent="Selector.SelectionChanged">
<BeginStoryboard Storyboard="{StaticResource endHeaderEdit}"/>
</EventTrigger>
这是完整的XAML。谁能告诉我这个xaml有什么问题吗
<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="Window1" Height="300" Width="300">
<Window.Resources>
<Storyboard x:Key="startHeaderEdit">
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="tabHeaderEdit" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="tabHeaderPresenter" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="endHeaderEdit">
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="tabHeaderEdit" Storyboard.TargetProperty="(UIElement.Visibility)" >
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="tabHeaderPresenter" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#FFF" Offset="0.0"/>
<GradientStop Color="#EEE" Offset="1.0"/>
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
<SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />
<SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" />
<SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" />
<SolidColorBrush x:Key="DisabledBorderBrush" Color="#AAA" />
<SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />
<Style x:Key="{x:Type TabItem}" TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<theme:ClassicBorderDecorator Name="ClassicBorder" SnapsToDevicePixels="true" BorderStyle="TabTop" Background="{TemplateBinding Background}" BorderBrush="{x:Static theme:ClassicBorderDecorator.ClassicBorderBrush}" BorderThickness="2">
<DockPanel x:Name="tabDockPanel">
<Button x:Name="tabCloseButton" Content="X" Cursor="Hand" DockPanel.Dock="Right" Focusable="False" FontFamily="Courier" FontSize="9" FontWeight="Bold" Margin="5,2,3,2" Padding="0" VerticalContentAlignment="Bottom" Width="16" Height="16"/>
<TextBox x:Name="tabHeaderEdit" DockPanel.Dock="Left" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Header}" Visibility="Collapsed">
</TextBox>
<ContentPresenter x:Name="tabHeaderPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="true" HorizontalAlignment="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" VerticalAlignment="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
</DockPanel>
</theme:ClassicBorderDecorator>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Panel.ZIndex" Value="1" />
</Trigger>
<Trigger Property="IsSelected" Value="false">
<Setter Property="Visibility" Value="{x:Static Visibility.Collapsed}" TargetName="tabHeaderEdit" />
<Setter Property="Visibility" Value="{x:Static Visibility.Visible}" TargetName="tabHeaderPresenter" />
<Setter TargetName="tabDockPanel" Property="Background" Value="#FFC9C7BA" />
</Trigger>
<EventTrigger RoutedEvent="Control.MouseDoubleClick">
<BeginStoryboard Storyboard="{StaticResource startHeaderEdit}"/>
</EventTrigger>
<EventTrigger RoutedEvent="Selector.SelectionChanged">
<BeginStoryboard Storyboard="{StaticResource endHeaderEdit}"/>
</EventTrigger>
<!--<EventTrigger RoutedEvent="Mouse.MouseLeave">
<BeginStoryboard Storyboard="{StaticResource endHeaderEdit}"/>
</EventTrigger>-->
<Trigger Property="TabStripPlacement" Value="Bottom">
<Setter TargetName="ClassicBorder" Property="BorderStyle" Value="TabBottom" />
</Trigger>
<Trigger Property="TabStripPlacement" Value="Left">
<Setter TargetName="ClassicBorder" Property="BorderStyle" Value="TabLeft" />
</Trigger>
<Trigger Property="TabStripPlacement" Value="Right">
<Setter TargetName="ClassicBorder" Property="BorderStyle" Value="TabRight" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="TabStripPlacement" Value="Top" />
</MultiTrigger.Conditions>
<Setter Property="Margin" Value="-2" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="TabStripPlacement" Value="Bottom" />
</MultiTrigger.Conditions>
<Setter Property="Margin" Value="-2" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="TabStripPlacement" Value="Left" />
</MultiTrigger.Conditions>
<Setter Property="Padding" Value="11,2,14,2" />
<Setter Property="Margin" Value="-2" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="TabStripPlacement" Value="Right" />
</MultiTrigger.Conditions>
<Setter Property="Padding" Value="14,2,11,2" />
<Setter Property="Margin" Value="-2" />
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Value="{DynamicResource {x:Static SystemColors.GrayTextBrush}}" Property="Foreground" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<TabControl Name="tabControlView" Margin="4" BorderThickness="1" BorderBrush="Black">
<TabControl.Items>
<TabItem Header="Header 1" Content="Content 1" HorizontalAlignment="Left" VerticalAlignment="Top"></TabItem>
<TabItem Header="Header 2" Content="Content 2" HorizontalAlignment="Left" VerticalAlignment="Top"></TabItem>
<TabItem Header="Header 3" Content="Content 3" HorizontalAlignment="Left" VerticalAlignment="Top"></TabItem>
</TabControl.Items>
</TabControl>
停止对
LostFocus
的编辑怎么样:
<EventTrigger SourceName="tabHeaderEdit" RoutedEvent="UIElement.LostFocus">
<BeginStoryboard Storyboard="{StaticResource endHeaderEdit}"/>
</EventTrigger>
尽管如此,我还是建议使用第一种方法,如果文本框在单击后仍停留在同一选项卡上,这会有点恼人。即使这样,对我也不起作用。你知道为什么我以前的做法行不通吗?这很管用。谢谢我做得不对。我想了解Selector.SelectionChanged或IsSelected=False触发器不工作的原因。知道吗?我不知道,对不起。您的触发器太多,可能存在冲突,或者一个触发器优先于另一个触发器。SelectionChanged可能不起作用,因为事件属于TabControl,而不是TabItem。
<Trigger Property="IsSelected" Value="false">
<Trigger.EnterActions>
<StopStoryboard BeginStoryboardName="start"/>
<BeginStoryboard Name="end" Storyboard="{StaticResource endHeaderEdit}"/>
</Trigger.EnterActions>
<Setter TargetName="tabDockPanel" Property="Background" Value="#FFC9C7BA" />
</Trigger>
<EventTrigger RoutedEvent="Control.MouseDoubleClick">
<BeginStoryboard Name="start" Storyboard="{StaticResource startHeaderEdit}"/>
</EventTrigger>