我正面臨一個問題,通過設置我的窗口的內容屬性,我顯然刪除了原有的內容。在所有窗口中,我有一個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世界中的事情變得如此簡單。 –