2016-11-21 7 views
1

Я хотел изменить выбранный цвет фона ListViewItem. Теперь я заметил, что значение по умолчанию не переопределяется.Стиль All ListViewItem в приложении UWP

<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 и не влияют на другие стили.

Edit:

Потому что я получил

Visual Studio требует более новой версии WIndows для отображения этого контента. Обновите версию Windows 10 Anniversary Edition (10.0.14393.0) или более позднюю версию.

Я установил целевую версию 10240. Это то, что я нашел в App.xaml после создания копии, как заявил Томас 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, но изменения не применяются.

+0

Добавьте копию «ItemContainerStyle» в свои ресурсы App.xaml без ключа, чтобы сделать его по умолчанию для вашего приложения. –

+0

Можете ли вы разместить ссылку на копию с 'ItemContainerStyle'? Я не нашел его, кроме ['ListViewItem'] (https://msdn.microsoft.com/en-us/library/windows/apps/mt299136.aspx). – testing

+0

Кажется, вы используете xamarin.form и используете xamarin 'ListView'? Вы решили эту проблему? –

ответ

2

Вы можете щелкнуть правой кнопкой мыши по любому элементу ListView в представлении конструктора и выбрать Edit Additional Templates ->Edit Generated Item Container (Item Container Style) ->Edit a Copy.
Затем выберите Apply to all и Application, чтобы автоматически вставить глобальную копию в app.xaml.

+0

Теперь я создал копию, как вы сказали (см. Мой отредактированный вопрос), но стиль не применяется. Я считаю, что это потому, что не было создано элемента 'ItemContainerStyle'? – testing

+0

Если я изменил 'SelectedBackground' на другой цвет, он применяется ко всем моим спискам ListView в приложении. Свойство 'ItemContainerStyle' должно быть удалено из вашего' ListView', чтобы использовать глобально определенный стиль. –

+0

Теперь я попробовал пример из [здесь] (http://stackoverflow.com/a/33346834/426227), и фон действительно применяется, но не в моем реальном приложении. Я также попытался применить свой внутренний стиль, и здесь он также работает. Возможно, проблема с картой (Xamarin.Forms). Как только я узнаю больше, я дам вам некоторую информацию. – testing