我在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颜色属性?
例如,如果用户点击该框,则将其从“绿色”变为“蓝色”。
我已经拥有了所有适当的代码来处理用户交互,我只是想知道如何更改画笔的颜色。
答案 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");