Дэвид. Я собрал пример окна, которое делает это с помощью триггеров на TextBox.Style
:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<SolidColorBrush x:Key="IsCheckedColor" Color="DarkGray" />
</Window.Resources>
<StackPanel>
<TextBox x:Name="textbox" Margin="36" Height="24" >
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Background" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=checkbox}" Value="True" >
<Setter Property="Background" Value="{StaticResource IsCheckedColor}" />
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<CheckBox x:Name="checkbox" Content="Click Me" Height="24" Margin="36"/>
</StackPanel>
</Window>
Вы не можете использовать Trigger
для изменения свойств другого элемента управления, но вы можете использовать их для изменения свойств элемента управления на основе чего-то другого, например DataContext
или другого элемента управления.
Каждый элемент управления может иметь коллекцию Triggers
, но она может содержать только EventTriggers
. В Style
вы можете использовать обычный Trigger
, который можно использовать для управления анимацией, а также DataTrigger
, который я использовал в этом примере для управления настройками TextBox
на основе свойств CheckBox
.
Обратите внимание, что я также использовал Setter
вне коллекции Triggers
, чтобы установить значение по умолчанию, и мне не нужна секунда Setter
, когда CheckBox
не отмечен - это просто возвращается в состояние «по умолчанию».
редактировать - как изменить фон отключен TextBox
Я делаю это в Blend, но если у вас нет Blend, вы, конечно, можете напрямую вставить XAML. Это связано с управлением состояниями. По мере перехода TextBox
между Normal
, MouseOver
и Disabled
вы можете анимировать изменения внешнего вида. В этом случае мы используем анимацию практически нулевой продолжительности, поэтому изменение происходит немедленно.
Добавьте следующее к StackPanel
:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="textbox" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<SplineColorKeyFrame KeyTime="00:00:00" Value="{StaticResource IsCheckedColor}"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>