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