我有一个WPF应用程序。在其中一个XAML中,我使用了Name属性,如下所示
x:Name="switchcontrol"
我必须使用this.switchcontrol
访问.cs文件中的control / property
我的问题是,我需要以静态方法访问控件,如
public static getControl()
{
var control = this.switchcontrol;//some thing like that
}
如何实现这一目标?
答案 0 :(得分:5)
this
。您可以尝试在静态属性中保存对实例的引用,例如:
public class MyWindow : Window
{
public static MyWindow Instance { get; private set;}
public MyWindow()
{
InitializeComponent();
// save value
Instance = this;
}
public static getControl()
{
// use value
if (Instance != null)
var control = Instance.switchcontrol;
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
Instance = null; // remove reference, so GC could collect it, but you need to be sure there is only one instance!!
}
}
答案 1 :(得分:0)
Tony方法的一些替代方法 - 您可以传入窗口(或您使用的任何xaml构造)作为方法的引用,例如
public static void GetControl(MainWindow window)
{
var Control = window.switchcontrol;
}
如果您要传递几种不同的派生类型的Window,您也可以这样做:
public static void GetControl(Window window)
{
dynamic SomeTypeOfWindow = window;
try
{
var Control = SomeTypeOfWindow.switchcontrol;
}
catch (RuntimeBinderException)
{
// Control Not Found
}
}