WPF更改样式的画笔颜色

时间:2009-11-02 22:05:53

标签: wpf styles brushes

我在WPF中有以下样式来绘制和着色一个框,这是一个自定义控件,在ResourceDictionary中定义了各种PART_Name项:

<ResourceDictionary>
.
.
.
<Brush x:Key="BoxStroke">#FFD69436</Brush>
  <LinearGradientBrush x:Key="BoxBrush" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
      <GradientStop Color="#FAFBE9" Offset="0" />
      <GradientStop Color="Green" Offset="1" />
    </LinearGradientBrush.GradientStops>
  </LinearGradientBrush>

<Style x:Key="BoxStyle" TargetType="Path">
    <Setter Property="Fill" Value="{DynamicResource BoxBrush}"/>
    <Setter Property="Stroke" Value="{DynamicResource BoxStroke}"/>
</Style>

<Style x:Key="Box" TargetType="Path" BasedOn="{StaticResource BoxStyle}">
    <Setter Property="Data" Value="M 0,0 H 60 V40 H 0 Z"/>
</Style>
.
.
.
</ResourceDictionary>

我的问题是如何访问画笔的GradientStop颜色属性?

例如,如果用户点击该框,则将其从“绿色”变为“蓝色”。

我已经拥有了所有适当的代码来处理用户交互,我只是想知道如何更改画笔的颜色。

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用数据绑定代替。将视图绑定到一个对象,该对象具有包含要更改的颜色值的属性。然后将该属性值绑定到渐变。单击该按钮时,修改该属性,数据绑定机制将为您更新屏幕上的颜色。只需确保实现INotifyPropertyChanged或使属性成为依赖属性。

祝你好运!

答案 1 :(得分:0)

一旦您可以在代码中访问画笔,您只需要为其指定一个Color值。例如,System.Windows.Media.ColorConverter类会将十六进制/网络颜色转换为System.Windows.Media.Color值。

以下是一个示例,希望这是您所询问的一般概念:

System.Windows.Media.LinearGradientBrush gb = new System.Windows.Media.LinearGradientBrush();
gb.GradientStops[0].Color = (Color)ColorConverter.ConvertFromString("#FF00FF00");