C# WPF按钮-同时指定模板和样式
我有一个按钮:C# WPF按钮-同时指定模板和样式,c#,.net,wpf,C#,.net,Wpf,我有一个按钮: <Button x:Name="someButton" Template="{StaticResource aButtonTemplate}" Command="{Binding MyCommand}" Style="{StaticResource ButtonStyle1}" > 现在,邻接模板看起来像: <ControlTemplate x:Key="aButtonTemplate
<Button x:Name="someButton"
Template="{StaticResource aButtonTemplate}"
Command="{Binding MyCommand}"
Style="{StaticResource ButtonStyle1}" >
现在,邻接模板看起来像:
<ControlTemplate x:Key="aButtonTemplate" TargetType="{x:Type Button}">
<Border Name="border" Background="Transparent" BorderBrush="Transparent" BorderThickness="2">
<ContentPresenter x:Name="content" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
然后我有按钮样式1
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Viewbox>
<Grid>
<Ellipse Stroke="#f2f2f0" StrokeThickness="3" Fill="red" Width="77" Height="77"/>
</Grid>
</Viewbox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在的问题是,由于行Template=“{StaticResource abuttonemplate}”
没有应用样式按钮style1。我没有看到任何椭圆
如何使样式与模板一起工作
编辑:当我在样式ButtonStyle1中再次指定ControlTemplate时,是否有方法使用BasedOn将这两种样式组合到ButtonStyle2中?我怎么做?
<Style x:Key="StyleButton2"
TargetType="Button"
BasedOn="{StaticResource StyleButton1}">
<Setter Property="Template"
Value="{StaticResource aButtonTemplate}"/>
</Style>
然后在按钮实例上仅使用此样式
显然,在此样式之前定义StyleButton1和aButtonTemplate(导致使用StaticResource)。
然后在按钮实例上仅使用此样式
显然,在此样式之前定义了StyleButton1和abuttonemplate(导致使用StaticResource)
如何使样式与模板一起工作
都在应用,但设置为{StaticResource abuttonemplate}
的模板
属性将覆盖样式
设置的模板
属性的值。本地值优先于样式设置器设置的值:
编辑:当我在样式ButtonStyle1中再次指定ControlTemplate时,是否有方法使用BasedOn将这两种样式组合到ButtonStyle2中?我怎么做
<Style x:Key="StyleButton2"
TargetType="Button"
BasedOn="{StaticResource StyleButton1}">
<Setter Property="Template"
Value="{StaticResource aButtonTemplate}"/>
</Style>
您可以将样式
基于另一个样式
,但不能将控制模板
基于另一个控制模板
。必须将ControlTemplate
定义为一个整体:
如何使样式与模板一起工作
都在应用,但设置为{StaticResource abuttonemplate}
的模板
属性将覆盖样式
设置的模板
属性的值。本地值优先于样式设置器设置的值:
编辑:当我在样式ButtonStyle1中再次指定ControlTemplate时,是否有方法使用BasedOn将这两种样式组合到ButtonStyle2中?我怎么做
<Style x:Key="StyleButton2"
TargetType="Button"
BasedOn="{StaticResource StyleButton1}">
<Setter Property="Template"
Value="{StaticResource aButtonTemplate}"/>
</Style>
您可以将样式
基于另一个样式
,但不能将控制模板
基于另一个控制模板
。必须将ControlTemplate
定义为一个整体:
我认为您希望将所有ControlTemplate工作移到样式模板中,至少我记得一年前是这样做的。我在其他一些地方也使用了该样式……因此,在这种情况下,我不希望将这两种样式结合起来。控件只能有一个模板。选择一个模板并使用它。在样式中设置或在按钮上设置;没关系。选择一个模板,让它做任何你想做的事情。@sabz你可以使用样式“继承”来自定义一个基本样式。更新:看,我想你想把所有的ControlTemplate工作移到你的样式模板中,至少我记得一年前是这样做的。我在其他一些地方也使用了这种样式…所以在这种情况下,我不想将这两种样式结合起来。一个控件只能有一个模板。选择一个模板并使用它。在样式中设置或在按钮上设置;没关系。选择一个模板,让它做任何你想做的事情。@sabz你可以使用样式“继承”来自定义一个基本样式。更新:请参阅感谢您的回复。然而,这是行不通的。椭圆的样式没有得到应用…你能告诉我你是如何使用它的吗?我指的是按钮的实例。不管怎样,我想我误解了你。如果你想看到椭圆,把ControlTemplate放在外面,让它成为一个资源(给它一个键),然后用有它的样式或者直接在按钮上引用它。谢谢你的回复。然而,这是行不通的。椭圆的样式没有得到应用…你能告诉我你是如何使用它的吗?我指的是按钮的实例。不管怎样,我想我误解了你。如果您想看到椭圆,请将该ControlTemplate置于外部并将其作为资源(给它一个键),然后使用包含它的样式或直接在按钮上引用它。