我正在尝试在WPF中创建一个对话框类。此类继承自Window
并提供一些默认按钮和设置。
实现基本上如下:
namespace Commons {
public class Dialog : Window {
public new UIElement Content {
get { return this.m_mainContent.Child; }
set { this.m_mainContent.Child = value; }
}
// The dialog's content goes into this element.
private readonly Decorator m_mainContent = new Decorator();
// Some other controls beside "m_mainContent".
private readonly StackPanel m_buttonPanel = new StackPanel();
public Dialog() {
DockPanel content = new DockPanel();
DockPanel.SetDock(this.m_buttonPanel, Dock.Bottom);
content.Children.Add(this.m_buttonPanel);
content.Children.Add(this.m_mainContent);
base.Content = content;
}
public void AddButton(Button button) {
...
}
}
}
如您所见,我重新定义了Content
属性。
现在我希望能够在XAML中使用这个对话框,如下所示:
<my:Dialog x:Class="MyDialogTest.TestDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:Commons;assembly=Commons"
Title="Outline" Height="800" Width="800">
<!-- Dialog contents here -->
</my:Dialog>
但是,在设置对话框的内容而不是Window.Content
时,这将使用Dialog.Content
。我如何使这项工作?
答案 0 :(得分:1)
您可能需要将“您的”类中的属性指定为“内容属性”,以便将对话框的XAML“内容”描述的子元素放入其中,而不是放入“内容”属性中。你的基础窗口。
[ContentProperty("Content")]
public class Dialog : Window {
如果这不起作用,请尝试更改名称.....所以试试这个:
[ContentProperty("DialogContent")]
public class Dialog : Window {
public new UIElement DialogContent {
get { return this.m_mainContent.Child; }
set { this.m_mainContent.Child = value; }
}