我有一个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无关的代码,它会编译并正确运行,所以我知道我的事件是正确连接的。谢谢你的帮助。
答案 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;
}
}
<强>建议强>
最好在视图模型中声明事件,并在需要时从代码中引发事件。