如何使用占位符继承WPF UserControl?

时间:2019-02-14 13:18:30

标签: c# wpf

我正在尝试实现以下目标,但是我不确定在WPF中是否可以实现以及我应该寻找什么。 我想在控件中的某个位置有一个基础UserControl,该基础具有共同的部分,而在子控件中的某个位置,有一个基于子级的部分,这对于每个使用基础UserControl的控件来说都是不同的。 我做了一张简单的图片来说明这一点: enter image description here

因此,每个继承基本UserControl的{​​{1}}都应在子内容中定义控件。这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以在某个地方(例如在您的ControlTemplate文件中)定义公用的App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ControlTemplate x:Key="CommonTemplate" TargetType="UserControl">
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" 
                    Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="Label" />
                    <TextBox Grid.Column="1" />

                    <TextBlock Grid.Row="1" Text="Label" />
                    <TextBox Grid.Row="1" Grid.Column="1" />

                    <ContentPresenter Grid.Row="2" Grid.ColumnSpan="2" 
                                        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>

                    <TextBlock Grid.Row="3" Text="Label" />
                    <TextBox Grid.Row="3" Grid.Column="1" />
                </Grid>
            </Border>
        </ControlTemplate>
    </ResourceDictionary>
</Application.Resources>

然后可以将此模板应用于您的UserControlsContent中的UserControl将在模板中ContentPresenter所在的位置结束,例如:

<UserControl Template="{StaticResource CommonTemplate}">
    <TextBlock>child content....</TextBlock>
</UserControl>