Как наследовать WPF UserControl с заполнителем? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь добиться следующего, но я не уверен, возможно ли это в WPF и, если возможно, то, что я должен искать.Я хочу иметь одну базу UserControl, которая будет иметь общие части и дочернюю часть где-то в элементе управления, которая будет отличаться для каждого элемента управления, использующего базу UserControl.Я сделал простую картинку, чтобы проиллюстрировать это: enter image description here

Таким образом, каждый UserControl, который наследует Base UserControl, должен определять элементы управления внутри дочернего содержимого.Это возможно?

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете определить общее 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>

Затем вы можете применить этот шаблон к вашему UserControls.Content из UserControl закончится тем, что ContentPresenter находится в шаблоне, например:

<UserControl Template="{StaticResource CommonTemplate}">
    <TextBlock>child content....</TextBlock>
</UserControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...