我已经按照this post中的接受答案的说明创建了资源字典的代码隐藏文件,并且它有效...所以现在我可以将事件附加到generic.xml文件中的控件。 / p>
但是现在我希望能够从那里的事件中调用DragMove()
方法,因为当时没有任何对托管字典的窗口的引用,我不知道如何调用这个DragMove()
方法。
因此,从资源字典代码后面的文件中,有什么方法可以引用当前将托管该资源字典的窗口吗?
[更新](临时解决方案)
作为一种简单(但又很愚蠢)的解决方法,我目前做了以下工作:
由于我可以从Application.Current.MainWindow
代码隐藏中引用Generic.xaml.cs
,我现在在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;
}
它,它有效......直到有人能够提出如何做到这一点的正确方法,它应该对我有用。
答案 0 :(得分:2)
我无法做到这一点。但是,如果您尝试确定给定特定资源的Window
,则可以使用RelativeSource
:
<SolidColorBrush x:Key="MyBrush" Color="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource WindowToColorConverter}"/>
如果您是通过代码执行此操作,则可以使用Window.GetWindow()。您只需要DependencyObject
托管Window
。
答案 1 :(得分:0)
从架构的角度来看,我会说你即将打破范式。可能是一个糟糕的决定,为资源字典提供消费它的UI概念,并提供除提供资源之外的一些逻辑。
您可能需要在UI和资源字典之间使用一些适配器,或者如果确实需要连接资源字典,那么您可能需要在资源容器中注入任何逻辑......
答案 2 :(得分:-1)
您可以通过
访问主窗口Application.Current.MainWindow
希望这有帮助