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

时间:2009-03-30 05:23:15

标签: c# wpf events

我已经按照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;
}

它,它有效......直到有人能够提出如何做到这一点的正确方法,它应该对我有用。

3 个答案:

答案 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

希望这有帮助