簡體   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