[英]WPF: Referencing the Window from a Custom Control
我已按照这篇文章中关于“接受答案”的说明进行操作,关于为资源字典在文件后面创建代码,它的工作原理是……所以现在我可以将事件附加到generic.xml文件中的控件上。
但是现在我希望能够从那里的事件中调用DragMove()
方法,并且由于当时没有指向托管字典的窗口的任何引用,因此我不知道如何调用此DragMove()
方法。
因此,从文件后面的资源字典代码中,有什么方法可以引用当前将托管该资源字典的窗口?
[更新](临时解决方案)
作为一种简单的(但很愚蠢的)解决方法,我目前已执行以下操作:
由于我可以从Generic.xaml.cs
代码后面引用Application.Current.MainWindow
,因此现在可以在Generic.xaml.cs
:
private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Application.Current.MainWindow.DragMove();
}
然后,我将PreviewMouseLeftButtonDown
处理程序附加到我拥有的每个Window
上,例如:
private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Application.Current.MainWindow = this;
}
它很好,它起作用了……直到有人能找到正确的方法来做到这一点,它应该足以为我服务。
我没有办法做到这一点。 但是,如果您要确定给定特定资源的Window
,则可以使用RelativeSource
:
<SolidColorBrush x:Key="MyBrush" Color="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource WindowToColorConverter}"/>
而且,如果您通过代码执行此操作,则可以使用Window.GetWindow() 。 您只需要在该Window
托管一个DependencyObject
。
从体系结构的角度来看,我会说您将打破这种范例。 为资源字典提供使用它的UI概念并提供一些除提供资源外的逻辑可能是一个错误的决定。
您可能需要UI和资源字典之间的适配器,或者如果确实需要此适配器来连接资源字典,则可能需要控制器,但是同样,您不应该在资源容器中注入任何逻辑...
您可以通过以下方式访问主窗口
Application.Current.MainWindow
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.