为WPF中的新基础窗口指定内容根目录
有没有办法为WPF中的附加XAML内容指定“孔” 例如,如果我创建了为WPF中的新基础窗口指定内容根目录,wpf,xaml,Wpf,Xaml,有没有办法为WPF中的附加XAML内容指定“孔” 例如,如果我创建了MySuperWindowBase,其中包含一些带有布局的XAML,我如何指定在MySuperWindowBase子类的布局中放置其他内容的位置 举个简单的例子 MySuperWindowBase: <Window> <StackPanel> <!-- Force child content here --> </StackPanel> </Window
MySuperWindowBase
,其中包含一些带有布局的XAML,我如何指定在MySuperWindowBase
子类的布局中放置其他内容的位置
举个简单的例子
MySuperWindowBase:
<Window>
<StackPanel>
<!-- Force child content here -->
</StackPanel>
</Window>
MyChildWindow:
<MySuperWindowBase>
<TextBlock>Place me in the StackPanel</TextBlock>
</MySuperWindowBase>
将我放在StackPanel中
样式
-
ContentTemplate
属性设置为包含必需元素样式
-
ContentTemplate
属性设置为包含必需元素几乎所有其他方法都会导致您在某些时候遇到名称范围问题。您想要的是为基类窗口提供一个模板。Gusdor的回答解释了一切,但解释了如何编写一个模板来显示控件的
内容
属性,下面是一个窗口控件模板的示例。窗口的内容是ChildWindow.xaml文件中
元素中的任何内容:将我放置在StackPanel中
是问题中的占位符内容。默认情况下,该XAML可视树片段将被分配给窗口的内容
属性
ContentPresenter
控件显示内容。默认情况下,它查看模板化父级的内容
属性,但您可以通过将ContentPresenter的ContentSource属性设置为模板化父级的其他属性的名称来更改该属性
<ControlTemplate TargetType="Window" x:Key="WindowBaseTemplate">
<Grid>
<Border
BorderBrush="Gray"
BorderThickness="1"
Margin="10"
Padding="20"
Background="GhostWhite"
>
<ContentPresenter
/>
</Border>
</Grid>
</ControlTemplate>
ContentPresenter
看起来一定有魔力,但这只是默认设置 您想要的是为基类窗口提供一个模板。Gusdor的回答解释了一切,但解释了如何编写一个模板来显示控件的内容
属性,下面是一个窗口控件模板的示例。窗口的内容是ChildWindow.xaml文件中
元素中的任何内容:将我放置在StackPanel中
是问题中的占位符内容。默认情况下,该XAML可视树片段将被分配给窗口的内容
属性
ContentPresenter
控件显示内容。默认情况下,它查看模板化父级的内容
属性,但您可以通过将ContentPresenter的ContentSource属性设置为模板化父级的其他属性的名称来更改该属性
<ControlTemplate TargetType="Window" x:Key="WindowBaseTemplate">
<Grid>
<Border
BorderBrush="Gray"
BorderThickness="1"
Margin="10"
Padding="20"
Background="GhostWhite"
>
<ContentPresenter
/>
</Border>
</Grid>
</ControlTemplate>
ContentPresenter
看起来一定有魔力,但这只是默认设置 听起来像是ContentPresenter
。你的描述太模糊了,无法告诉你更多。@EdPlunkett我更新了。这是Xamarin还是WPF?StackLayout在WPF中不存在。我可以给你一个WPF答案,如果你在Xamarin中使用它,它可能需要一些修改。@EdPlunkett把我的想法弄错了-这是WPF。听起来像ContentPresenter
。你的描述太模糊了,无法告诉你更多。@EdPlunkett我更新了。这是Xamarin还是WPF?StackLayout在WPF中不存在。我可以给你一个WPF答案,如果你在Xamarin中使用它,它可能需要一些修改。@EdPlunkett让我的线交叉了-这是WPF。