gpt4 book ai didi

c# - 多个 AppBar/CommandBar

转载 作者:行者123 更新时间:2023-11-30 13:07:56 24 4
gpt4 key购买 nike

在 Windows Phone 8 中,我能够使用多个 AppBar,在某些枢轴页面上交换它们,但在 Windows Phone 8.1 中,我不确定如何做到这一点,或者这是否可能。

基本上对于我的场景,我有 3 个数据透视页。每个页面都需要有不同的 CommandBar,因为它需要有不同的控件。

有人能告诉我怎么做吗?

编辑:我用于 Windows Phone 8 的代码:

XAML:

<phone:PhoneApplicationPage.Resources>
<shell:ApplicationBar x:Key="AppBar1" IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/>
<shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItem Text="MenuItem 1"/>
</shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>

<shell:ApplicationBar x:Key="AppBar2" IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1" />
<shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2" />
<shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItem Text="MenuItem 1" />
<shell:ApplicationBarMenuItem Text="MenuItem 2" />
</shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>

C#:

private void MainPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (MainPivot.SelectedIndex)
{
case 0:
ApplicationBar = this.Resources["AppBar1"] as ApplicationBar;
break;
case 1:
ApplicationBar = this.Resources["AppBar2"] as ApplicationBar;
break;
}
}

基本上在 PivotPage 更改时切换 AppBar。

最佳答案

一个简单的解决方案是使用 XAML 定义您的按钮和 ViewModel(MVVM 模式)来控制这些按钮的可见性,这可以避免在代码中创建按钮和复杂的逻辑来控制显示哪个按钮。

首先,定义所有可能在CommandBar中使用的按钮:

<Page.BottomAppBar>
<CommandBar>
<!--buttons of group1-->
<AppBarButton Icon="Icon1" Label="button1"/>
...
<!--buttons of group2-->
<AppBarButton Icon="Icon2" Label="button2"/>
...
<!--buttons of group3-->
<AppBarButton Icon="Icon3" Label="button3"/>
</CommandBar>
</Page.BottomAppBar>

然后在ViewModel中定义一个属性,比如:

public class PageViewModel : INotifyPropertyChanged
{
...
public int CommandGroup
{
get { return _commandGroup; }
set { _commandGroup = value; NotifyPropertyChanged("CommandGroup"); }
}
}

这个CommandGroup属性用来控制按钮的显示/隐藏,例如设置CommandGroup = 1显示group1中的按钮,隐藏其他组中的按钮,设置CommandGroup = 2显示group2中的按钮和隐藏其他组中的按钮,这里的group1和group2只是逻辑组。

然后定义一个转换器,将 CommandGroup 属性的值转换为 Visibility:

public class CommandGroupToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (System.Convert.ToInt32(value) == System.Convert.ToInt32(parameter)) ? Visibility.Visible : Visibility.Collapsed;
}
}

最后,将此 CommandGroup 属性绑定(bind)到 CommandBar 中的所有按钮(复制和粘贴内容):

<Page.Resources>
<c:CommandGroupToVisibilityConverter x:Key="MyConverter"/>
</Page.Resources>
<Page.BottomAppBar>
<CommandBar>
<!--buttons of group1-->
<AppBarButton
Icon="Icon1" Label="button1"
Visibility="{Binding CommandGroup, Converter={StaticResource MyConverter}, ConverterParameter=1}"/>

<!--buttons of group2-->
<AppBarButton
Icon="Icon2" Label="button2"
Visibility="{Binding CommandGroup, Converter={StaticResource MyConverter}, ConverterParameter=2}"/>

<!--buttons of group3-->
<AppBarButton
Icon="Icon3" Label="button3"
Visibility="{Binding CommandGroup, Converter={StaticResource MyConverter}, ConverterParameter=3}"/>
</CommandBar>
</Page.BottomAppBar>

请注意,当 CommandGroup == 2 时,ConverterParameter=2 的所有按钮都会显示,而其他按钮则消失。

这在一个页面中有多个 View (如 Pivot)并且每个 View 都有不同的命令按钮组的情况下可能非常有用。

关于c# - 多个 AppBar/CommandBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com