Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF按钮-同时指定模板和样式_C#_.net_Wpf - Fatal编程技术网

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置于外部并将其作为资源(给它一个键),然后使用包含它的样式或直接在按钮上引用它。