WinRT - 从静态事件设置控件属性

时间:2014-11-17 23:22:18

标签: user-interface controls winrt-xaml static-methods

我有一个WinRT商店应用程序,它使用相机作为条形码阅读器。由于某些设备具有如此糟糕的相机,扫描将无法正常工作。我在我的设置flyout(setttings.xaml)中添加了一个字段来选择一个相机或将其关闭,将选择保存到ApplicationData.Current.LocalSettings。我必须通知MainPage.xaml更改并删除相机图像及其周围的边框。我通过自定义事件(可以工作)执行此操作,但事件处理程序显示必须是静态的,静态方法不能访问UI控件。如何编辑我的控件的可见性参数??

在Settings.xaml.cs中:

...
MainPage.SettingsChanged(this, null);
...

在MainPage.xaml.cs中:

internal static async void SettingsChanged(object sender, EventArgs e)
{
    if (settingsManager.Camera=="Off")
    {
        //these won't compile, it doesn't even see my control in Intelisense
        borderCapture.Visibility = Visibility.Collapsed;
        videoCapture.Visibility = Visibility.Collapsed;
    }
}

如果我在If语句中放入一些与UI无关的代码,它会编译并正确运行,所以我知道我的事件是正确连接的。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在Settings.Xaml.cs中声明设置已更改事件,如下所示

   public static event EventHandler SettingsChanged;

从MainPage.Xaml.cs构造函数

中获取此事件
     public MainPage()
        {
              this.InitializeComponent();
              Settings.SettingsChanged += SettingsFlyout_SettingsChanged;
        }

     void SettingsFlyout_SettingsChanged(object sender, EventArgs e)
        {
           if (settingsManager.Camera=="Off")
           {                 
             borderCapture.Visibility = Visibility.Collapsed;
            videoCapture.Visibility = Visibility.Collapsed;
           }
        }

<强>建议

最好在视图模型中声明事件,并在需要时从代码中引发事件。