Wpf UserControl父窗口-在多个窗口中使用此UserControl时

Wpf UserControl父窗口-在多个窗口中使用此UserControl时,wpf,windows,user-controls,Wpf,Windows,User Controls,我在WPF中有用户控件。这应该在多个窗口中使用。我想在运行时获取当前父窗口 在文件后面的用户控制代码中,正在使用以下行 mywindow1parentwindow=(MyWindow1)Window.GetWindow(this) 如果在MyWindow2中使用相同的UserControl会怎么样?在这种情况下,上面的行是不正确的。有什么建议吗?您可以这样做,尽管我认为让子控件以这种方式引用父控件不是一个很好的代码设计 如果您有这样一个需求的理由,您可以在sayUserControl的构造函数中

我在
WPF
中有用户控件。这应该在多个窗口中使用。我想在运行时获取当前父窗口

在文件后面的用户控制代码中,正在使用以下行

mywindow1parentwindow=(MyWindow1)Window.GetWindow(this)


如果在
MyWindow2
中使用相同的
UserControl
会怎么样?在这种情况下,上面的行是不正确的。有什么建议吗?

您可以这样做,尽管我认为让子控件以这种方式引用父控件不是一个很好的代码设计

如果您有这样一个需求的理由,您可以在say
UserControl
的构造函数中执行类似的操作

  Loaded += (sender, args) => {
    Window win = Window.GetWindow(this);
    if (win == null)
      return;
    if (win is MyWindow1) {
      MessageBox.Show("Window 1");
    } else if (win is MyWindow2) {
      MessageBox.Show("Window 2");
    }
  };

基本上使用
的是
操作符来检查类型,然后执行操作。我再次建议您不要走这条路,除非您有非常令人信服的理由。

欢迎来到StackOverflow。在提出问题之前,请阅读常见问题解答,并确保您的问题清晰、完美,便于他人理解。是否有其他更好的方法来获得相同的需求?您应该尝试重新设计您的需求。如果可能的话,您希望您的设置使孩子不太了解家长。您可以说在用户控件中有一个DP,该DP可以通过父控件的绑定进行分配。基于此DP,您可以修改UserControl的行为。然后,它会将UserControl从如此密切的关系中分离出来,并允许它单独扩展。上述解决方案是正确的,但我需要调用当前的窗口方法n属性,我如何才能做到这一点,因为我必须将窗口强制转换为特定的窗口。我不符合您的要求。是的,如果要调用窗口的方法或参数,则确实需要强制转换。但是,如果MyWindow1和MyWindow2都具有UserControl所需的相同方法/参数,那么您应该从由这些方法和参数组成的公共基类派生这两个窗口。这样,UserControl就可以将窗口强制转换为基类类型并调用方法/参数,而无需指定特定的窗口类型。