C# 从WPF中的不同位置访问表单

C# 从WPF中的不同位置访问表单,c#,wpf,global,C#,Wpf,Global,仍然习惯于win forms程序员的WPF。我在一个应用程序中有多个表单,可以从多个位置访问,因此我需要将表单保持为“全局”,因为我不确定是否有更好的术语 例如,“详细信息”可以从“主菜单”打开,但也可以从“搜索”中的网格打开,我希望搜索返回的详细信息显示在“详细信息”页面中,即使它是从主菜单预先打开的 我遇到了Application.Current.Properties,并开始在其中存储一些表单,但设置以下内容感觉非常错误: Vehicle vehicleForm = new Vehicle(

仍然习惯于win forms程序员的WPF。我在一个应用程序中有多个表单,可以从多个位置访问,因此我需要将表单保持为“全局”,因为我不确定是否有更好的术语

例如,“详细信息”可以从“主菜单”打开,但也可以从“搜索”中的网格打开,我希望搜索返回的详细信息显示在“详细信息”页面中,即使它是从主菜单预先打开的

我遇到了
Application.Current.Properties
,并开始在其中存储一些表单,但设置以下内容感觉非常错误:

Vehicle vehicleForm = new Vehicle();
Application.Current.Properties["frmVehicle"] = vehicleForm;
然后访问它:

if (Application.Current.Properties["frmVehicle"] == null)
            Application.Current.Properties["frmVehicle"] = new frmVehicle();

Vehicle vehicleFrm = (Vehicle)Application.Current.Properties["frmVehicle"];
vehicleFrm.Show();
vehicleFrm.Activate();
我刚刚还发现了
Application.Current.Windows
,这让我有些困惑


处理此类表单的最有效/行业标准方法是什么?

我不确定是否理解您如何正确打开窗口。但是,如果您只想在应用程序的整个运行期间拥有一个窗口实例,那么可以使用。基本上,window类有一个静态属性,它保存唯一的实例


如果您不需要在窗口中保留任何状态,您可以在每次需要显示它时创建它的新实例。

我只需要检查是否包含窗口的实例。如果是这样的话,你就给它焦点,如果不是这样的话,你就创建一个实例。

在使用单例时要小心。您必须阻止关闭表单并使其不可见,否则您肯定不想处理它。现在我说的是“表单”而不是“窗口”。。。该死的WPF:-)你的问题到底是什么?WPF窗口和Windows窗体之间并没有太大的区别。您可以用与打开windows窗体类似的方式打开子窗口。我认为这是最合乎逻辑的方法。当我发布时,我刚刚了解了Application.Current.Windows。当“发现窗外”在循环中打开时,要检查的公共属性是什么?@Oli:没有必要进行这样的检查。只有打开的窗口才会在此集合中。请务必阅读MSDN上的评论:谢谢,马克,这是一件很简单的事情,但通常我都会关注这样的事情。再次感谢