0

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

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

我有所有适当的代码来处理用户交互,我只是对如何更改画笔的颜色感到困惑。

4

2 回答 2

2

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

祝你好运!

于 2009-11-02T22:22:15.813 回答
0

一旦您可以在代码中访问画笔,您只需为其分配一个颜色值。例如,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");
于 2009-11-02T22:51:15.290 回答