【问题标题】:WPF Change Style's Brush ColorWPF 更改样式的画笔颜色
【发布时间】:2010-12-12 10:49:00
【问题描述】:

我在 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 颜色属性?

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

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

【问题讨论】:

    标签: wpf styles brushes


    【解决方案1】:

    一旦您可以在代码中访问画笔,您只需为其分配一个颜色值。例如,System.Windows.Media.ColorConverter 类会将 hex/web 颜色转换为 System.Windows.Media.Color 值。

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

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

    【讨论】:

      【解决方案2】:

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

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多