我想将NavigationView
用作我的UWP应用的标签导航,因为它具有适当的样式并可以很好地处理溢出。
现在,我想为标签右侧的每个NavigationViewItem
添加一个按钮。仅当选择了该项目后,该按钮才应该可见。
我已经在下面的代码中添加了按钮,但是当不选择选项卡时,我不知道如何隐藏按钮。我尝试将按钮绑定到我的数据模型上的布尔值,我在true
上将其设置为ItemInvoked
,但这没有用。
<NavigationView x:Name="NavView"
PaneDisplayMode="Top"
OverflowLabelMode="NoLabel"
IsSettingsVisible="False"
IsBackButtonVisible="Collapsed"
MenuItemsSource="{x:Bind TabItems}">
<NavigationView.MenuItemTemplate>
<DataTemplate x:DataType="models:TabNavigationItem">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind Text}" VerticalAlignment="Center"></TextBlock>
<Viewbox Width="16" Height="16" VerticalAlignment="Center" Margin="2,0,0,0">
<Button Background="{StaticResource Transparent}" VerticalAlignment="Center">
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""></FontIcon>
</Button>
</Viewbox>
</StackPanel>
</DataTemplate>
</NavigationView.MenuItemTemplate>
</NavigationView>
我看过Community Toolkit TabView,但是当我自己处理所有导航时,只需要一行可选项目,NavigationView
更适合我。
谢谢。
编辑: 我已经尝试过
<Viewbox Width="16" Height="16" VerticalAlignment="Center" Margin="2,0,0,0" Visibility="{x:Bind Selected, Converter={StaticResource BoolToVisibilityConverter}, Mode="OneWay"}">
和
private void NavView_OnItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{
if (args.InvokedItem is TabNavigationItem t)
{
t.Selected = true;
}
Bindings.Update();
}
答案 0 :(得分:2)
您应该在Bindings.Update
类中实现INotifyPropertyChanged
而不是TabNavigationItem
并在PropertyChanged
属性设置器内触发Selected
事件。这样,它应该通知UI并正确更新按钮的可见性。另外,别忘了也取消选择所有其他项目。
答案 1 :(得分:1)
您可以使用“可见性”属性隐藏按钮。我将为该任务创建一个转换器,该转换器采用bool并返回可见或折叠的值。