将按钮插入NavigationViewItem UWP

时间:2019-01-14 12:42:54

标签: c# xaml uwp

我想将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="&#xE711;"></FontIcon>
                                </Button>
                            </Viewbox>
                        </StackPanel>
                    </DataTemplate>
                </NavigationView.MenuItemTemplate>
</NavigationView>

Picture of NavView

我看过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();
}

2 个答案:

答案 0 :(得分:2)

您应该在Bindings.Update类中实现INotifyPropertyChanged而不是TabNavigationItem并在PropertyChanged属性设置器内触发Selected事件。这样,它应该通知UI并正确更新按钮的可见性。另外,别忘了也取消选择所有其他项目。

答案 1 :(得分:1)

您可以使用“可见性”属性隐藏按钮。我将为该任务创建一个转换器,该转换器采用bool并返回可见或折叠的值。