为WPF中的新基础窗口指定内容根目录

为WPF中的新基础窗口指定内容根目录,wpf,xaml,Wpf,Xaml,有没有办法为WPF中的附加XAML内容指定“孔” 例如,如果我创建了MySuperWindowBase,其中包含一些带有布局的XAML,我如何指定在MySuperWindowBase子类的布局中放置其他内容的位置 举个简单的例子 MySuperWindowBase: <Window> <StackPanel> <!-- Force child content here --> </StackPanel> </Window

有没有办法为WPF中的附加XAML内容指定“孔”

例如,如果我创建了
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。