【发布时间】:2018-11-03 17:31:20
【问题描述】:
我正在尝试找到一种解决方案,以便在 WPF 中重用 XAML 中的代码: 我有 3 个样式非常相似的按钮,唯一的区别是 BorderThickness。它们都有一个样式触发器集,如果用户将鼠标移到它们上面,BorderThickness 将设置为 1。
<Button Width="50" Height="50" BorderBrush="#66CCFF" >
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<Image Margin="12" Source="picture1.png"/>
</Button>
<Button Width="50" Height="50" BorderBrush="#66CCFF">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="BorderThickness" Value="0,1,0,1" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<Image Margin="12" Source="picture2.png"/>
</Button>
<Button Width="50" Height="50"BorderBrush="#66CCFF">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="BorderThickness" Value="1,0,1,1" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<Image Margin="12" Source="picture3.png"/>
</Button>
由于除了 IsMouseOver 为 false 时应用的 BorderThickness 之外样式几乎相同,我想删除重复代码并在 ResourceDictionary 中有某种样式,我可以在其中指定初始 BorderThickness 作为参数(或其他东西沿线),其余的都是一样的。
我试图将BorderThickness="p,q,r,s" 部分移动到<Button ...> 标记,但是当我将鼠标悬停时,样式并没有应用(我的假设是它们之间存在层次结构)。
【问题讨论】:
-
嗨,我认为很多关于 wfp 样式的在线教程都涵盖了这一点。
-
@Stefan 我知道一般是如何使用样式的,但在使用稍微不同的样式时就不知道了。我不想在 3 个地方维护类似的代码。 3 种样式之间存在差异,但只有很小的一种,可以参数化 - 如果有此选项的话。
-
那么文章中提到的
Style inheritance不够? -
@Stefan 这可能就足够了,但是我只能移出
部分,而不是完整的
标签: c# wpf templates button styles