我有一个用户控件,它使用如下的画笔资源为控件中的几个元素提供颜色:
<UserControl.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black"/>
</UserControl.Resources>
现在,我想使用触发器更改此资源的颜色,以便在发生特定条件时提供突出显示。
这可能吗?如果是这样,怎么做?
谢谢!
我有一个用户控件,它使用如下的画笔资源为控件中的几个元素提供颜色:
<UserControl.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black"/>
</UserControl.Resources>
现在,我想使用触发器更改此资源的颜色,以便在发生特定条件时提供突出显示。
这可能吗?如果是这样,怎么做?
谢谢!
我认为您不能从 xaml 中的触发器更改资源颜色。
您可以在代码隐藏中更改颜色,或者将 SolidColorBrush 中的颜色设置为对象的数据绑定属性。
SolidColorBrush myBrush = (SolidColorBrush)this.TryFindResource("BlackBrush");
if (myBrush != null)
{
myBrush.Color = Colors.Yellow;
}
否则,您需要根据触发器交换画笔。下面是一个例子:
<Grid Margin="50">
<Grid.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black"/>
<SolidColorBrush x:Key="WhiteBrush" Color="White"/>
<Style x:Key="test" TargetType="TextBlock">
<Setter Property="Background" Value="{StaticResource BlackBrush}"/>
<Style.Triggers>
<Trigger Property="Text" Value="white">
<Setter Property="Background" Value="{StaticResource WhiteBrush}"/>
</Trigger>
<Trigger Property="Text" Value="black">
<Setter Property="Background" Value="{StaticResource BlackBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<TextBlock
Height="20"
Margin="50"
Padding="50"
Style="{StaticResource test}"
Text="white">
</TextBlock>
</Grid>
这将根据文本值更改背景颜色;如果文本为白色,则背景为白色,黑色,则背景为黑色。
不,您不能这样做 XAML,但问题是您想根据其他控件/控件的状态更改某些控件。
您至少有以下选择(看看这个线程):
您也可以在元素上使用 EventTriggers,它看起来像这样:
<StackPanel>
<Label Margin="10" x:Name="lbl">My Label</Label>
<Button Width="150" Height="100" Background="Yellow" x:Name="btn1">My Button
</Button>
<StackPanel.Triggers>
<EventTrigger RoutedEvent="Button.MouseMove" SourceName="btn1">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl" Storyboard.TargetProperty="(Label.Background)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Yellow"/>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.MouseLeave" SourceName="btn1">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl" Storyboard.TargetProperty="(Label.Background)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="White"/>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</StackPanel.Triggers>
您可以创建画笔并将其“Color”属性绑定到隐藏控件的“Foreground.Color”属性。然后可以在任何地方使用此画笔,并在执行触发器时更改其颜色:
<Grid Background="Black">
<Grid.Resources>
<SolidColorBrush x:Key="BrushForeground" Color="{Binding ElementName=collapsedControl, Path=Foreground.Color}" />
<SolidColorBrush x:Key="BrushGreen" Color="Lime" />
<SolidColorBrush x:Key="BrushRed" Color="Red" />
</Grid.Resources>
<Control Name="collapsedControl" Visibility="Collapsed">
<Control.Style>
<Style TargetType="Control">
<Setter Property="Foreground" Value="{StaticResource BrushGreen}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsIncorrect}" Value="True">
<Setter Property="Foreground" Value="{StaticResource BrushRed}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Control.Style>
</Control>
<Label Content="Sample Text" Foreground="{StaticResource BrushForeground}" />
<Button Width="150"
Height="50"
Click="Button_Click"
Content="Set IsIncorrect to true" />
</Grid>