我的目标是只在特定情况下提供 AppBar。我试图通过创建一个 AppBar 来实现这一点,但在这种情况出现之前将其禁用。但是,如果您将 AppBar 上的 IsEnabled
属性设置为 False
,当您启动应用程序并右键单击(通常会打开 AppBar)时,应用程序会崩溃。这是框架中的错误吗?禁用 AppBar 的正确方法是什么?
编辑:当您将 Visibility
设置为 Collapsed
时也会发生这种情况。
更多信息:我正在通过 Visual Studio 调试器运行它,但是会弹出一个单独的“Visual Studio 即时调试器”窗口,并显示消息“App.exe [2596] 中出现未处理的 win32 异常。 “上面会弹出一个警告框,上面写着“调试器已附加到 App.exe,但未配置为调试此未处理的异常。要调试此异常,请分离当前的调试器。”
编辑 2:这不仅仅是我的代码。如果您只是将 IsEnabled="False"
添加到 Microsoft 自己的示例 AppBarControl 项目(可在此处找到:http://code.msdn.microsoft.com/windowsapps/XAML-AppBar-control-sample-2aa1cbb4)中的 AppBar,它也会崩溃
编辑 3:@G。 Andrew Duthie - devhammer 提供了我正在使用的答案。我只是想补充一点,我发现最好使用 this.BottomAppBar = null
来禁用它,而不是设置 IsEnabled
或 Visibility
属性。如果您只是将 Visibility
设置为 Collapsed
,那么当您右键单击时,应用程序仍然认为 AppBar 存在,即使它不可见,所以您的下一次常规点击将被解释为通常关闭 AppBar 的点击,因此您必须再次点击才能真正执行您尝试的操作。
最佳答案
我已经尝试了一段时间(同时使用 IsEnabled,以及将 Visibility 属性设置为 Visibility.Collapsed),我能够成功禁用 AppBar 而不会引发异常的唯一方法是显示 AppBar第一的。显示 AppBar 后,将 IsEnabled 设置为 false,或将 Visibility 设置为 Visibility.Collapsed 不再引发异常。
但是,如果您以编程方式创建 AppBar,如下所示:
myAppBar = new AppBar();
StackPanel sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
Button myButton = new Button();
myButton.Content = "Click Me";
sp.Children.Add(myButton);
myAppBar.Content = sp;
但是在您第一次需要它之前不要将它添加到 Page.BottomAppBar,您不会得到异常。
我使用带有以下处理程序的按钮进行了测试:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (this.BottomAppBar == null)
{
this.BottomAppBar = myAppBar;
}
else {
this.BottomAppBar = null;
}
}
当应用程序第一次加载时,如果您尝试调用 AppBar,则什么也不会发生。单击按钮(将 AppBar 添加到 Page.BottomAppBar),调用 AppBar 将显示 AppBar。再次单击按钮,AppBar 不再显示(尽管 myAppBar 仍然实例化并在您再次需要时准备就绪)。
希望对您有所帮助!
关于c# - 如何禁用 Windows 8/WinRT AppBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958620/