Создайте кисть в качестве ресурса
<SolidColorBrush x:Key="MyFillBrush" Color="Pink" />
и обратитесь к ней в своем стиле
<Style x:Key="MyShapeStyle" TargetType="Shape">
<Setter Property="Fill" Value="{DynamicResource MyFillBrush}" />
</Style>
...
<!-- Then further down you may use it like this -->
<StackPanel Width="100">
<Rectangle Style="{StaticResource MyShapeStyle}" Height="50" Margin="8" />
<Rectangle Style="{StaticResource MyShapeStyle}" Height="50" Margin="8" />
<Ellipse Style="{StaticResource MyShapeStyle}" Height="50" Margin="8" />
<Button Content="Click to change color" Click="Button_Click" Margin="8" />
</StackPanel>
Теперь, чтобы изменить цвет всех фигур, которые используют стиль "MyShapeStyle",Вы можете сделать следующее из своего кода:
private void Button_Click(object sender, RoutedEventArgs e)
{
Random r = new Random();
this.Resources["MyFillBrush"] = new SolidColorBrush(Color.FromArgb(
0xFF,
(byte)r.Next(255),
(byte)r.Next(255),
(byte)r.Next(255)));
}
То, что делает эту работу, заключается в том, что вы используете DynamicResource
для ссылки на кисть в своем стиле - это говорит WPF контролировать эторесурс для изменений.Если вместо этого вы используете StaticResource
, вы не получите такого поведения.