有没有办法指定"洞"用于WPF中的其他XAML内容?
例如,如果我使用布局创建MySuperWindowBase
并且其中包含一些XAML,如何在MySuperWindowBase
的子类中指定布局中的其他内容的位置?
简化示例
MySuperWindowBase:
<Window>
<StackPanel>
<!-- Force child content here -->
</StackPanel>
</Window>
MyChildWindow:
<MySuperWindowBase>
<TextBlock>Place me in the StackPanel</TextBlock>
</MySuperWindowBase>
答案 0 :(得分:2)
你想要的是给基类窗口一个模板。 Gusdor的回答解释了所有内容,但是如何编写一个显示控件的Content
属性的模板,所以这里是一个窗口控件模板的说明性示例。窗口的内容是您的ChildWindow.xaml文件中<Window></Window>
元素内的任何内容:<TextBlock>Place me in the StackPanel</TextBlock>
是您问题中的占位符内容。默认情况下,该XAML可视化树片段将分配给窗口的Content
属性。
ContentPresenter
控件显示内容。默认情况下,它会查看模板化父级的Content
属性,但您可以通过将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
看起来必须有魔力,但它只是默认值。
答案 1 :(得分:1)
Style
-
https://code.msdn.microsoft.com/windowsdesktop/WPF-styling-a-Window-in-fcf4e4ce ContentTemplate
属性以包含必填元素。几乎所有其他方法都会导致您在某些时候遇到名称范围问题。