在NavigationView中更新SelectionIndicator的颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在NavigationView中更新SelectionIndicator的颜色相关的知识,希望对你有一定的参考价值。

我正在使用NavigationView控件在我的UWP应用程序中提供左窗格汉堡菜单导航。

我想更改选择指示器的颜色(显示在您选择的项目旁边的小矩形)。

generic.xaml我可以看到颜色被设置为系统强调颜色:

<Style TargetType="NavigationViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="NavigationViewItem">
                <Grid
                    x:Name="LayoutRoot"
                    Height="40"
                    Background="{TemplateBinding Background}"
                    Control.IsTemplateFocusTarget="True">

                    <!-- Wrap SelectionIndicator in a grid so that its offset is 0,0 - this enables the offset animation. -->
                    <Grid 
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center">

                        <Rectangle
                            x:Name="SelectionIndicator"
                            Width="6"
                            Height="24"
                            Fill="{ThemeResource NavigationViewSelectionIndicatorForeground}"
                            Opacity="0.0"/>
                    </Grid>

                    <Border
                        x:Name="RevealBorder"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}" />

                    <Grid Height="40" HorizontalAlignment="Left">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition x:Name="IconColumn" Width="48" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <Viewbox x:Name="IconBox"
                            Child="{TemplateBinding Icon}"
                            Margin="16,12"/>

                        <ContentPresenter x:Name="ContentPresenter"
                            Grid.Column="1"
                            ContentTransitions="{TemplateBinding ContentTransitions}"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            Content="{TemplateBinding Content}"
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                            Margin="{TemplateBinding Padding}"/>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在我的页面XAML文件(使用NavigationView)中有一种方法可以将Fill矩形NavigationViewSelectionIndicatorForeground的颜色更改为我设置的某个值吗?

我知道我可以复制整个模板并更新副本,并在NavigationView上设置模板,但是改变一个值似乎需要很多开销。

答案

您可以使用x:Key="NavigationViewSelectionIndicatorForeground"定义自己的画笔,例如在App.xaml中:

<Application ...>
    <Application.Resources>
        <SolidColorBrush x:Key="NavigationViewSelectionIndicatorForeground"
                 Color="Yellow" />
    </Application.Resources>
</Application>

或者你也可以在Page的范围内或甚至在你的NavigationViewResources中声明资源,它只需要在XAML树中通往NavigationView的路径中。

因为您的资源在级联中稍后出现,所以它将使用您定义的画笔覆盖默认的NavigationViewSelectionIndicatorForeground

以上是关于在NavigationView中更新SelectionIndicator的颜色的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何更新 NavigationView 详细信息屏幕?

无法修改 NavigationView 中的 TextView

UWP NavigationView通过MVVM切换到另一个页面

ExtJS navigationview UI组件

如何在android中刷新navigationview的headview内容

在 NavigationView 中清除 SwiftUI 列表未正确返回默认值