访问用户控件中的Application.MainWindow内容

本文关键字:Application MainWindow 内容 用户 控件 访问 | 更新日期: 2023-09-27 18:23:50

在WPF应用程序中,访问MainWindow内容很容易,但在用户控制中如何访问。

在WPF应用程序中,如果我的MainWindow名称是Window1,并且我必须从同一应用程序中的其他类访问它的一个名为CName的字符串变量。

 Window1 ww = Application.Current.MainWindow as Window1;
 String reqstring = ww.CName ;

我也想在usecontrol中做同样的事情。

假设我的usercontrol名称是ABCcontrol,第一个/main类名是ABCconrolLib

namespace ABCcontrol
{
  public partial class ABCcontrolLib : UserControl
  {
    Public String CName = "ABC";
    //....
  }
 }

现在,我想通过使用Application.Control.MainWindow或其他类似的方式在同一用户控件的其他类中访问这个CName

请帮助我,因为这是我在WPF 中的第一个UserControl

访问用户控件中的Application.MainWindow内容

您可以访问Application.Current.MainWindow,因为在整个应用程序中只有一个MainWindow实例,所以他们将其定义为静态属性。如果您的用户控件具有相同的特性(只需要在整个应用程序中使用它的一个实例),那么您也可以在那里定义一个静态属性。类似于:然后您可以访问名称属性,如UserControl1.Instance.CName

 public partial class UserControl1 : UserControl
        {
            public static UserControl1 Instance
            {
                get;
                private set;
            }
     Public String CName = "ABC";
            public UserControl1()
            {
                if (Instance != null)// there should be just one instance
                    throw new NotSupportedException();
                Instance = this;
                InitializeComponent();
            }
        }

如果出现错误,那么您的usercontrol并不是只有一个实例,您必须定义一个List并在那里注册每个usercontrol实例。类似于:

 public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            (App.Current as App).UserControl1List.Add(this);
            InitializeComponent();
        }
    }
     public partial class App : Application
    {
        public App()
        {
            UserControl1List = new List<UserControl1>();
        }
        public List<UserControl1> UserControl1List
        {
            get;
           private set;
        }
    }

然后你可以像(App.Current as App)一样访问每个实例。UserControl1List[0]。。。或者您可以使用字典来存储其中的每个UserControl。