在usercontrol中访问Application.MainWindow内容

时间:2014-09-21 09:35:24

标签: c# wpf user-controls

在WPF应用程序中,可以轻松访问MainWindow内容,但如何在usercontrol中进行操作。

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

 Window1 ww = Application.Current.MainWindow as Window1;

 String reqstring = ww.CName ;

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

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

namespace ABCcontrol
{

  public partial class ABCcontrolLib : UserControl
  {
    Public String CName = "ABC";

    //....

  }
 }

现在我想通过使用Application.Control.MainWindow或其他类似的方式在其他同类usercontrol类中访问此CName

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

1 个答案:

答案 0 :(得分:1)

您可以访问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并在那里注册用户控件的每个实例。类似的东西:

 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。