jok*_*efe 11 c# microsoft-metro windows-8 windows-runtime winrt-xaml
我的目标是在某种情况下只提供AppBar.我试图通过创建一个AppBar来实现这一目标,但在这种情况出现之前将其禁用.但是,如果您将IsEnabledAppBar上的属性设置为False,当您启动应用程序并右键单击(通常会打开AppBar)时,应用程序崩溃.这是框架中的错误吗?禁用AppBar的正确方法是什么?
编辑:这也是当你设置发生Visibility到Collapsed.
更多信息:我通过Visual Studio调试器运行它,但是弹出一个单独的"Visual Studio即时调试器"窗口,其中显示消息"App.exe [2596]中发生了未处理的win32异常".弹出一个警告框,上面写着"调试器附加到App.exe但未配置为调试此未处理的异常.要调试此异常,请分离当前的调试器."
编辑2:这不仅仅是我的代码.如果您只是添加IsEnabled="False"到Microsoft自己的示例AppBarControl项目中的AppBar,它也会崩溃(可在此处找到:http://code.msdn.microsoft.com/windowsapps/XAML-AppBar-control-sample-2aa1cbb4 )
编辑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;
Run Code Online (Sandbox Code Playgroud)
但是在第一次需要它之前不要将它添加到Page.BottomAppBar,你不会得到异常.
我使用带有以下处理程序的按钮进行了测试:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (this.BottomAppBar == null)
{
this.BottomAppBar = myAppBar;
}
else {
this.BottomAppBar = null;
}
}
Run Code Online (Sandbox Code Playgroud)
当应用程序第一次加载时,如果您尝试调用AppBar,则不会发生任何事情.单击按钮(将AppBar添加到Page.BottomAppBar),调用AppBar将显示AppBar.再次单击该按钮,不再显示AppBar(尽管myAppBar仍然实例化,并在您再次需要时准备就绪).
希望有所帮助!