我想使用 NavigationView
作为我的 UWP 应用的选项卡导航,因为它具有适当的样式并且可以很好地处理溢出。
现在我想为标签右侧的每个 NavigationViewItem
添加一个按钮。此按钮应仅在选择项目时可见。
我已经在下面的代码中实现了添加按钮,但是我不知道如何在未选择选项卡时隐藏按钮。我曾尝试将按钮绑定(bind)到我的数据模型上的 bool 值,我在 ItemInvoked
上将其设置为 true
,但这没有用。
<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();
}
最佳答案
您应该在 TabNavigationItem
类中实现 INotifyPropertyChanged
,而不是 Bindings.Update
,并在其中触发 PropertyChanged
事件Selected
属性 setter 。这样它应该通知 UI 并正确更新按钮可见性。另外,不要忘记取消选择所有其他项目。
关于c# - 将按钮插入 NavigationViewItem UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181792/