以静态方法访问WPF名称属性

时间:2013-12-10 09:37:51

标签: c# wpf

我有一个WPF应用程序。在其中一个XAML中,我使用了Name属性,如下所示

 x:Name="switchcontrol"

我必须使用this.switchcontrol访问.cs文件中的control / property 我的问题是,我需要以静态方法访问控件,如

public static getControl()
{
 var control = this.switchcontrol;//some thing like that
}

如何实现这一目标?

2 个答案:

答案 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
        }
    }