WPF 在其他 ControlTemplates 中重用模板

标签 wpf controltemplate

我目前正在尝试找出如何在其他控件模板中重用模板(如标题所述)。我想做的是制作一堆按钮,它们都略有不同,但有几个相似的功能。它们都共享几个相同的图形元素,并具有处理这些图形元素的相同触发器。我希望做的是能够取出该代码并将其放入另一个模板中,并让所有按钮都引用该模板。这样一来,管理起来就更容易了,整体上也更有意义。我确定有办法,但我对 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>

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

最佳答案

你说的到底是什么区别? 您或许可以结合使用附加属性和触发器来解决问题,但我们需要更多地了解您的问题。

关于WPF 在其他 ControlTemplates 中重用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693403/

相关文章:

c# - 当鼠标在弹出窗口外单击时如何防止弹出窗口关闭

c# - WPF:使用调度程序在 TextBox VS 中移动插入符号。不使用它

c# - 获取 ComboBox 的 SelectedItem (MVVM)

WPF 工具提示 ControlTemplate 不显示内容

.net - 未调用 RowStyleSelector

wpf - 如何在 ControlTemplate 中使用 ElementName 绑定(bind)?

.net - 错误模板绑定(bind)错误wpf

c# - 将控件添加到 WPF 窗口时更改属性的顺序

wpf - 虚拟化 WrapPanel

c# - .Net 3.5 中的 GetTemplateChild 是否已过时以及 FrameWorkTemplate.FindName 和 ControlTemplate.FindName 之间的区别是什么