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