问题是我的样式文件由于重复而可憎行1万行。
例如,我有一个基于ButtonScaleMinus
的{{1}}样式,但是我不能以相同的方式分隔ControlTemplate。有很多与边界名称绑定的触发器。
唯一的区别实际上是AllButtons
的内容,因此所有相同的内容,只有一小段代码会有所不同。
<Border x:Name='ElementBorder'...
有什么方法可以将上面的代码简化成这样:
<Style x:Key='ButtonScaleMinus'
TargetType='Button'
BasedOn='{StaticResource AllButtons}'>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name='ElementBorder'
CornerRadius="5"
BorderThickness="1"
Padding="0"
BorderBrush='{StaticResource border1}'
Background='{StaticResource MenuButtonGradient}'>
<Viewbox Margin='10'
x:Name='ViewBox'
VerticalAlignment="Center"
HorizontalAlignment="Center">
<Path Data='M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z'
Fill='White'
Stroke='White'
x:Name='faImage'/>
</Viewbox>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Opacity"
Value="0.2" />
<Setter Property="Foreground"
Value='LightGray' />
</Trigger>
<Trigger Property="IsMouseOver"
Value="True">
<Setter TargetName="ElementBorder"
Property="Background"
Value='{StaticResource DefaultButtonOverBackground}' />
<Setter Property="Cursor"
Value='Hand' />
</Trigger>
<Trigger Property="IsPressed"
Value="True">
<Setter TargetName="ElementBorder"
Property="Background"
Value='{StaticResource DefaultButtonPressedBackground}' />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:0)
似乎您没有该按钮的内容,因此您为要使用的每个图标都有一个模板。
那是一个错误。
无论如何,您都可以简化那里的内容,设置拉伸路径,它将填充其中的容器,因此您可能会丢失视图框。
本质上,您需要路径的属性-几何(路径的数据),填充,斯托克以及您在其他模板中使用的其他任何东西。
都可以。
创建一个IconButton之类的东西,继承Button并为这些属性添加依赖项属性。
或
一个附加那些依赖属性的类。
将所有几何图形移动到资源字典中并为其提供密钥。
这是一个例子
<Geometry x:Key="FlowRight">
M1.265625,12.9837493896484L95.625,50.7181243896484 1.265625,88.5462493896484 24.375,50.7181243896484 1.265625,12.9837493896484z
</Geometry>
然后可以将其用作StaticResource。
然后,您可以拥有一个IconButton模板。 如果您有很多(例如)加图标按钮,则定义样式可设置几何形状和画笔。
或
您可以直接在使用模板的Button / IconButton上直接设置或绑定这些属性。
或
两者都做。设置一个或两个属性以覆盖通用样式的那些属性。
也许对于您想做的事情不够灵活。
您可以使用ContentControl和样式/模板在模板中定义内容。
您可以将ContentPresenter添加到模板中,无论将按钮的内容设置为什么,都会在其中显示。