Приложение Магазина Windows — цвет фона Gridview для выбранных элементов

Я искал в гугле ответ на свой вопрос, но ни один из форумов не смог дать ответ. Я просто хочу изменить цвет фона элементов в сетке после того, как он был выбран. У меня есть определение стиля в моем App.xaml, и я связал его со своим ItemContainerStyle следующим образом:

<GridView x:Name="gvwTests" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top"
    Width="998" Height="567" Margin="10,51,0,0" Padding="5,0,5,0"
    Background="#FF768E9C"
    ItemTemplate="{StaticResource testTemplate}"
    Style="{StaticResource PAGridViewStyle}" ItemContainerStyle="{StaticResource PAGridViewItemStyle}"
    IsDoubleTapEnabled="False" IsRightTapEnabled="False" SelectionMode="Multiple" SelectionChanged="GvwTests_SelectionChanged">
</GridView>

Я создал копию стиля по умолчанию:

<Style x:Key="PAGridViewItemStyle" TargetType="GridViewItem">
    <Setter Property="Background" Value="#0077FF" />
    <Setter Property="Margin" Value="0 0 5 5"/>
    <Setter Property="Padding" Value="20 40 40 40" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GridViewItem">
                <Border x:Name="OuterContainer">
                    ...
                    <VisualStateManager.VisualStateGroups>
                        ...
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Selecting">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="SelectionBackground"
                                                Storyboard.TargetProperty="Opacity"
                                                Duration="0"
                                                To="1" />
                                    <DoubleAnimation Storyboard.TargetName="SelectedBorder"
                                                Storyboard.TargetProperty="Opacity"
                                                Duration="0"
                                                To="1" />
                                    <DoubleAnimation Storyboard.TargetName="SelectingGlyph"
                                                Storyboard.TargetProperty="Opacity"
                                                Duration="0"
                                                To="1" />
                                    <DoubleAnimation Storyboard.TargetName="HintGlyphBorder"
                                                Storyboard.TargetProperty="Opacity"
                                                Duration="0"
                                                To="1" />
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter"
                                                            Storyboard.TargetProperty="Foreground">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListViewItemSelectedForegroundThemeBrush}" />
                                    </ObjectAnimationUsingKeyFrames>
                                    <ColorAnimation Storyboard.TargetName="SelectionBackground"
                                                    Storyboard.TargetProperty="Color"
                                                    Duration="0:0:1"
                                                    From="Red" To="Beige" />
                                </Storyboard>
                            </VisualState>
                            ...
                        </VisualStateGroup>
                        ...
                    </VisualStateManager.VisualStateGroups>
                    ...
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я не эксперт в этом, поэтому я не могу изменить цвет, когда элемент был нажат или нажат.

Как мне поступить или что я делаю не так?


person DerpyNerd    schedule 19.12.2013    source источник


Ответы (2)


Цвет фона легче изменить в App.xaml как переопределение:

<Application.Resources>
  <ResourceDictionary>
    <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBackgroundThemeBrush" Color="#56c2ff" />
    <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBorderThemeBrush" Color="#56c2ff" />
    <SolidColorBrush x:Key="ListViewItemSelectedBackgroundThemeBrush" Color="#56c2ff" />
    ...
person crea7or    schedule 19.12.2013
comment
Если я правильно понимаю, вы переопределяете кисти по умолчанию? Это гениально и глупо с моей стороны! Я пробовал что-то подобное до того, как получил сообщение об ошибке, говорящее, что для словаря ресурсов требуется ключ x: / Я попробую это завтра и вернусь к вам по этому поводу. Спасибо! - person DerpyNerd; 20.12.2013
comment
Хорошо, я попытался, но я получаю сообщение об ошибке, напоминающее мне, что для словаря ресурсов требуется ключ. Я случайным образом добавляю один (x:Key=ListStyles). Любая идея, почему эти стили не применяются? - person DerpyNerd; 20.12.2013
comment
попробуй удалить свои стили. стили по умолчанию находятся здесь: C:\Program Files (x86)\Windows Kits\8.0\Include\WinRT\Xaml\Design\generic.xaml - person crea7or; 20.12.2013

Найден блог Майка Толти здесь это может помочь. Вы используете Blend для изменения всех «недоступных» стилей. Если вы посмотрите на генерацию XAML Blend, это на самом деле имеет больше смысла.

person Reynier Booysen    schedule 02.04.2014
comment
Привет, спасибо за вклад :) Проблема была решена, но я буду иметь в виду блог, выглядит хорошо. - person DerpyNerd; 03.04.2014