我正面临一个问题,通过设置我的窗口的内容属性,我显然删除了原有的内容。在所有窗口中,我有一个dockpanel,用于向用户弹出帮助上下文帮助,但在设置窗口的content属性时会丢失。因此,我只会看到我添加的控件的内容,并且由于dockpanel不存在,所以按F1不会执行任何操作。我不想将这个dockpanel添加到每个控件中,因为它很糟糕的代码重用,所以我可以做些什么来将dockpanel保留在窗口上并添加内容而不覆盖窗口的原始内容?WPF - 如何在设置内容属性时保留当前内容
这是我设置窗口内容的代码。
private void btnHelp_Click(object sender, RibbonControlEventArgs e)
{
System.Windows.Window window = new ResizeableWindow()
{
Title = "Help",
Content = new Controls.Help(),
ResizeMode = ResizeMode.NoResize
};
window.ShowDialog();
}
这是对我的帮助控件的代码,它只是一个文档查看器阅读XPS文档,这是使用的DockPanel中。
public partial class Help : UserControl
{
public Help()
{
InitializeComponent();
string appPath = "path";
XpsDocument doc = new XpsDocument(appPath, FileAccess.Read);
var docx = doc.GetFixedDocumentSequence();
HelpDocViewer.Document = docx;
}
}
这是一个包含DockPanel中
<Window x:Class="Controls.ResizeableWindow"
KeyDown="HelpKeyListen">
<Grid>
<DockPanel x:Name="HelpPanel">
</DockPanel>
</Grid>
</Window>
这里我ResizableWindow的XAML是用于调整大小窗口
public ResizeableWindow()
{
InitializeComponent();
}
private void HelpKeyListen(object sender, KeyEventArgs e)
{
if (e.Key == Key.F1)
{
var HelpControl = new Help();
DockPanel.SetDock(HelpControl, Dock.Right);
HelpPanel.Children.Insert(0, HelpControl);
}
}
几行代码,显示您目前的做法会很好。这听起来像你的基本方法有一些问题,但很难从你的描述中分辨出来。 – grek40
不要更改'Window'的'Content'。用你的页脚(或其他控件)和一个主ContentContarea来控制用户。将其中的一个添加到您的表单中,并在*上更改“Content”。 –
此外,您应该*认真考虑*寻找WPF的MVVM模式。它会让WPF世界中的事情变得如此简单。 –