考虑以下非常简单的CustomControl:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ViewToLearn.WpfControls">
<Style TargetType="{x:Type local:VtlCustomButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:VtlCustomButton}">
<Grid>
<Button Content="Hi" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
如果我将一些这些添加到测试项目中,我会得到以下结果:
到目前为止一切顺利。现在我决定实际上我更喜欢将每个按钮的背景颜色设置为红色。显然我可以单独设置每个按钮的背景属性;
<Button Content="Hi" Background="Red" />
这将有效。然而逻辑规定,如果我希望所有按钮都有一个红色边框,那么显然风格会更有意义,所以为此我改变了控件的代码:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ViewToLearn.WpfControls">
<Style TargetType="{x:Type Button}">
<Setter Property="Background"
Value="Red" />
</Style>
<Style TargetType="{x:Type local:VtlCustomButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:VtlCustomButton}">
<Grid>
<Button Content="Hi" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
但是这没有效果。我确信原则是正确的,但将其应用于自定义控件的细节会让我感到沮丧。为什么这是因为它目前未能产生预期的结果。是因为我把风格放在哪里,还是因为我没有掌握的更基本的东西?
修改
我一直在尝试创建自定义(非用户)控件以及将样式和模板应用于它们的方法。我真正想要影响的控件由几个不同的元素(按钮,图像,面板文本框等)组成,但为了这个问题,我选择了一个基于标准vs模板的自定义控件,从而产生上面显示的代码。使用基于肯定没有出现工作,但我确实发现以下修正确实有效。我很想知道为什么这比我的原创和我在第一时间做的不正确(这可能是一种更有效的方法去解决这个问题,特别是因为有几个元素的风格我想修改)。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ViewToLearn.WpfControls">
<Style x:Key="vtlstyle"
TargetType="{x:Type Button}">
<Setter Property="Background"
Value="Red" />
</Style>
<Style TargetType="{x:Type local:VtlCustomButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:VtlCustomButton}">
<Grid>
<Button Content="Hi"
Style="{StaticResource vtlstyle}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
答案 0 :(得分:0)
使用receive(Message)
:
BasedOn
<强>编辑&gt;&GT;&GT;&GT;&GT; 强>
使用按钮上的样式(资源不足):
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red" />
</Style>
<Style x:Key="myButtonStyle" TargetType="{x:Type local:VtlCustomButton}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Content" Value="Hi"/>
</Style>