我正在尝试实现以下目标,但是我不确定在WPF中是否可以实现以及我应该寻找什么。
我想在控件中的某个位置有一个基础UserControl
,该基础具有共同的部分,而在子控件中的某个位置,有一个基于子级的部分,这对于每个使用基础UserControl
的控件来说都是不同的。
我做了一张简单的图片来说明这一点:
因此,每个继承基本UserControl
的{{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>
然后可以将此模板应用于您的UserControls
。 Content
中的UserControl
将在模板中ContentPresenter
所在的位置结束,例如:
<UserControl Template="{StaticResource CommonTemplate}">
<TextBlock>child content....</TextBlock>
</UserControl>