首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个ControlTemplate使用ControlTemplate?

如何从另一个ControlTemplate使用ControlTemplate?
EN

Stack Overflow用户
提问于 2017-01-19 00:31:44
回答 1查看 264关注 0票数 0

我有过

代码语言:javascript
复制
<!-- DERIVED1 - DERIVES FROM 'MOST BASE' -->
<ControlTemplate TargetType="ContentControl" x:Key="Derived1WidgetControlTemplate">
    <GroupBox Style="{StaticResource WidgetControlTemplateStyle}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonDown">
                <i:InvokeCommandAction Command="{Binding ExpandCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>

        <DockPanel>
            <!-- Some additional controls go here ... -->
            <Label Content="Blah blah" />

            <DockPanel>
                <!-- Content ... -->
                <ContentPresenter />
            </DockPanel>
        </DockPanel>
    </GroupBox>
</ControlTemplate>

<!-- MOST BASE -->
<ControlTemplate TargetType="ContentControl" x:Key="WidgetControlTemplate">
    <GroupBox Style="{StaticResource WidgetControlTemplateStyle}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonDown">
                <i:InvokeCommandAction Command="{Binding ExpandCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>

        <DockPanel>
            <!-- Content ... -->
            <ContentPresenter />
        </DockPanel>
    </GroupBox>
</ControlTemplate>

显然,这两个模板几乎完全相同。我能做些什么来去除重复的片段呢?

将它们合并到单个ControlTemplate中并传递依赖项或附加属性不是一个选项-我需要有两个可区分的控件模板。

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 22:21:44

与样式不同,您不能仅“覆盖”ControlTemplate的一部分,也不能将ControlTemplate基于另一个ControlTemplate。您必须(重新)将整个模板定义为一个整体。

您可以做的是将GroupBox和模板的所有公共部分移动到UserControl,并将此UserControl包含在两个模板中,例如:

代码语言:javascript
复制
<UserControl x:Class="WpfApplication2.GroupBoxUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication2"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Template>
        <ControlTemplate TargetType="UserControl">
            <GroupBox Style="{StaticResource WidgetControlTemplateStyle}">
                <ContentPresenter />
            </GroupBox>
        </ControlTemplate>
    </UserControl.Template>
</UserControl>

...

<ControlTemplate TargetType="ContentControl" x:Key="TemplateA">
    <local:GroupBoxUserControl>
        <TextBlock>1</TextBlock>
    </local:GroupBoxUserControl>
</ControlTemplate>
<ControlTemplate TargetType="ContentControl" x:Key="TemplateB">
    <local:GroupBoxUserControl>
        <TextBlock>2</TextBlock>
    </local:GroupBoxUserControl>
</ControlTemplate>

除此之外,恐怕无法避免在XAML标记中两次声明相同的元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41724627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档