繁体   English   中英

WPF:从自定义控件引用窗口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM