gpt4 book ai didi

c# - WPF:以编程方式更改具有自定义样式的控件的颜色

转载 作者:太空狗 更新时间:2023-10-29 23:34:07 25 4
gpt4 key购买 nike

<DrawingImage x:Key="HexagonImage">
<DrawingImage.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="White"
Geometry="M 250,0 L 750,0 L 1000,433 L 750,866 L 250,866 L 0,433 Z">
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="10" LineJoin="Round"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>

<Style x:Key="HexagonButton" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image x:Name="hexImg" Source="{StaticResource HexagonImage}"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

我有一个按钮,它的样式是这个 HexagonButton,我想改变它的颜色我尝试以编程方式更改 Backgroup 属性,但无济于事。

我设法做到这一点的唯一方法是使用新的绘图图像创建一种全新的样式。并分配它。但我确信有一种更简单的方法可以做到这一点。

最佳答案

我通过将 GeomteryDrawing 直接包含在 Button 模板中,并使用 RelativeSource 绑定(bind)到 Foreground 来让它工作BackgroundButton 祖先的属性(我在样式声明中为其指定了默认值):

<Style x:Key="HexagonButton" TargetType="{x:Type Button}">
<Setter Property="Background" Value="White" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image x:Name="hexImg">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=Background}" Geometry="M 250,0 L 750,0 L 1000,433 L 750,866 L 250,866 L 0,433 Z">
<GeometryDrawing.Pen>
<Pen Brush="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=Foreground}" Thickness="10" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

那么默认的黑白按钮是:

<Button Style="{StaticResource HexagonButton}">Click me</Button>

自定义按钮是:

<Button Style="{StaticResource HexagonButton}" Background="Yellow" Foreground="Red">Click me</Button>

关于c# - WPF:以编程方式更改具有自定义样式的控件的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com