我有一个代表WPF应用程序主窗口的XAML文件。
现在我希望此窗口显示由另一个XAML文件指定的内容。
这有效,但DataContext
的C#代码中丢失了UserControl
。
我认为<Frame Source=....>
以某种方式破坏了WPF的逻辑树。
我想要有同样的行为,好像<Frame Source=....>
只是被 Content1.xaml 文件内容替换,即周围DataContext
的{{1}} class继承到Window
。
有没有一种简单的方法可以解决这个问题? 我发现的所有solutions看起来都有点矫枉过正。
伪代码
MainWindow.xaml
UserControl
Content1.xaml
<Window ....>
<Frame Source="Content1.xaml" />
</Window>
答案 0 :(得分:7)
Joe White的解决方案here解决了这个问题。
引用他的回答:
在XAML中:
<Frame Name="frame"
LoadCompleted="frame_LoadCompleted"
DataContextChanged="frame_DataContextChanged"/>
在codebehind中:
private void frame_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
UpdateFrameDataContext(sender, e);
}
private void frame_LoadCompleted(object sender, NavigationEventArgs e)
{
UpdateFrameDataContext(sender, e);
}
private void UpdateFrameDataContext(object sender, NavigationEventArgs e)
{
var content = frame.Content as FrameworkElement;
if (content == null)
return;
content.DataContext = frame.DataContext;
}