WPF如何在其他ControlTemplates中重用模板

3
我目前正在尝试找出如何在其他控制模板中重用模板(正如标题所说)。我想要做的是制作一堆略有不同但具有几个相似特征的按钮。它们都共享几个相同的图形元素,并且具有处理这些图形元素的相同触发器。我希望能够将该代码提取出来并放入另一个模板中,然后让所有按钮都引用该模板。这样更容易管理,而且总体上更有意义。我相信有一种方法,但我还是比较新手WPF。感谢任何帮助!
编辑: 以下是一些展示我想要做的事情的代码。
<ControlTemplate x:Key="LeftJustifyButtonTemplate" TargetType="{x:Type RadioButton}">
    <Grid Width="24" Height="24">
        <Rectangle HorizontalAlignment="Stretch" Fill="#00000000" Stroke="{x:Null}"/>
        <Rectangle x:Name="backRectangle" HorizontalAlignment="Stretch" Margin="0,0,0,0" Stroke="#FFB9B9B9" StrokeThickness="0.5" RadiusX="4" RadiusY="4" Visibility="Hidden">
            <Rectangle.Fill>
                <LinearGradientBrush EndPoint="0.146,0.146" StartPoint="2.057,2.057">
                    <GradientStop Color="#FF000000" Offset="0"/>
                    <GradientStop Color="#FFFFFFFF" Offset="1"/>
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <Rectangle x:Name="foreRectangle" Margin="1,1,1,1" VerticalAlignment="Stretch" Fill="#FFE0E0E0" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="4" RadiusY="4" Visibility="Hidden"/>
        <Path Margin="2.875,7,2.875,0" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" VerticalAlignment="Top" Height="1" StrokeThickness="0.5"/>
        <Path Margin="2.875,9.375,8,0" VerticalAlignment="Top" Height="1" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M3.625,4 L17.514069,4" StrokeThickness="0.5"/>
        <Path Margin="2.875,11.5,2.875,11.5" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" StrokeThickness="0.5"/>
        <Path Margin="2.875,0,8,9.375" VerticalAlignment="Bottom" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M3.625,4 L17.514069,4" Height="1" StrokeThickness="0.5"/>
        <Path Margin="2.875,0,2.875,7" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" VerticalAlignment="Bottom" Height="1" StrokeThickness="0.5"/>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="backRectangle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="foreRectangle" Property="Visibility" Value="Visible"/>
        </Trigger>
        <Trigger Property="IsChecked" Value="True">
            <Setter TargetName="backRectangle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="foreRectangle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="foreRectangle" Property="Fill" Value="#FFFFFFFF"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

几乎所有的这些内容(除了中间的五个路径)都用于多个按钮。这是因为它用于鼠标悬停和选中触发器。我想做的是让所有的代码都在一个地方,然后让多个按钮能够引用该代码。

这个问题你也没有解决吗?我本来也要问同样的问题。 - djschwartz
2个回答

0

我不认为你可以使用模板来实现这一点,但是请查看样式的BasedOn属性。


0
你具体指的是什么样的差异? 你可能可以通过附加属性和触发器的组合来实现,但我们需要更多了解你的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接