在UWP应用程序中设置所有ListViewItem的样式

时间:2016-11-21 11:16:11

标签: xaml uwp xamarin.forms windows-10-universal listviewitem

我想更改ListViewItem的所选背景颜色。现在我注意到,默认值没有被覆盖。

<Style TargetType="ListViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListViewItem">
                <ListViewItemPresenter
                  ContentTransitions="{TemplateBinding ContentTransitions}"
                  SelectionCheckMarkVisualEnabled="True"
                  CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}"
                  CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}"
                  DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}"
                  DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}"
                  FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}"
                  FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}"
                  PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}"
                  PointerOverBackground="{ThemeResource SystemControlHighlightListLowBrush}"
                  PointerOverForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                  SelectedBackground="{StaticResource YellowBrush}"
                  SelectedForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                  SelectedPointerOverBackground="{ThemeResource SystemControlHighlightListAccentMediumBrush}"
                  PressedBackground="{ThemeResource SystemControlHighlightListMediumBrush}"
                  SelectedPressedBackground="{ThemeResource SystemControlHighlightListAccentHighBrush}"
                  DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
                  DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}"
                  ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}"
                  HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                  VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                  ContentMargin="{TemplateBinding Padding}"
                  CheckMode="Inline"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

this post中提到,必须覆盖ItemContainerStyle属性。但这只能在ListView本身上完成。

是否没有选项覆盖应用中所有ListViewItem的样式?

PS:人们可以覆盖画笔,例如。

<SolidColorBrush x:Key="SystemControlHighlightListAccentLowBrush" Color="Yellow" />

但我只想设置ListViewItem的样式而不影响其他样式。

修改

因为我得到了

  

Visual Studio需要较新版本的WIndows才能显示此内容。请更新到Windows 10 Anniversary Edition(10.0.14393.0)或更高版本。

我将目标版本设置为10240.这是我在创建副本后在 App.xaml 中找到的内容,如Thomas Schneiter所述:

<Application.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/>
        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
        <Setter Property="TabNavigation" Value="Local"/>
        <Setter Property="IsHoldingEnabled" Value="True"/>
        <Setter Property="Padding" Value="12,0,12,0"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="MinWidth" Value="{ThemeResource ListViewItemMinWidth}"/>
        <Setter Property="MinHeight" Value="{ThemeResource ListViewItemMinHeight}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <ListViewItemPresenter 
                        CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                        ContentMargin="{TemplateBinding Padding}" 
                        CheckMode="Inline"
                        ContentTransitions="{TemplateBinding ContentTransitions}" 
                        CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                        DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}" 
                        DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" 
                        DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}" 
                        DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
                        FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}" 
                        FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                        PointerOverForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}" 
                        PressedBackground="{ThemeResource SystemControlHighlightListMediumBrush}" 
                        PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" 
                        PointerOverBackground="{ThemeResource SystemControlHighlightListLowBrush}" 
                        ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}" 
                        SelectedPressedBackground="{ThemeResource SystemControlHighlightListAccentHighBrush}" 
                        SelectionCheckMarkVisualEnabled="True" 
                        SelectedForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}" 
                        SelectedPointerOverBackground="{ThemeResource SystemControlHighlightListAccentMediumBrush}" 
                        SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}" 
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

现在我尝试覆盖SelectedBackground,但不会应用更改。

1 个答案:

答案 0 :(得分:2)

您可以在Designer视图中右键单击任何ListView,然后选择Edit Additional Templates - &gt; Edit Generated Item Container (Item Container Style) - &gt; Edit a Copy
然后选择Apply to allApplication以自动将全局副本插入app.xaml。