Пользовательский / отключенный селектор списка при наведении курсора (windows8) - PullRequest
0 голосов
/ 13 марта 2012

Я хочу отключить визуальный эффект при наведении мыши на каждый элемент моего списка, и я хотел бы также отключить визуальный эффект, когда пользователь нажимает кнопку.

Я прочитал, что это можно сделать, используяDataTrigger в Windows Phone, но в Windows 8 мы не можем использовать DataTrigger: DataTrigger в WinRT?

Что еще можно использовать для удаления этого визуального эффекта?
Я виделStyleSelector / ListViewItemStyleSelector, могу ли я использовать это?
Если да, где я могу найти образец, потому что я не понял, как он работает.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Если вы имеете в виду отключить выбранный стиль элемента, то в WPF вы можете сделать это:

<Style x:Key="NullSelectionStyle" TargetType="ListBoxItem">
    <Style.Resources>
        <!-- SelectedItem with focus -->
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <!-- SelectedItem without focus -->
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
        <!-- SelectedItem text foreground -->
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{DynamicResource {x:Static SystemColors.ControlTextColorKey}}" />
    </Style.Resources>
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>

<ListBox ItemContainerStyle="{StaticResource NullSelectionStyle}" ...>

К сожалению, у меня пока нет доступа к Windows 8, поэтому я не могу сказать, работает ли он на WinRT.

В качестве альтернативы, если вам вообще не нужен какой-либо выбор, просто используйте ItemsControl.

Например, вместо <ListBox .../> используйте <ItemsControl .../>. ItemsControl показывает список элементов, таких как ListBox, но не имеет понятия выбранного элемента.

1 голос
/ 15 марта 2012

Если вы хотите отредактировать шаблон ListBox для приложения в стиле Metro, вы можете удалить анимацию из MouseOver VisualState.Вот шаблон ListBoxItem, который будет работать.

<Style x:Key="NoSelectListBoxItemStyle" TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal"/>
                                    <VisualState x:Name="MouseOver"/>
                                    <VisualState x:Name="Disabled">
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="SelectionStates">
                                    <VisualState x:Name="Unselected">
                                        <Storyboard>
                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ContentContainer">
                                                <SplineDoubleKeyFrame KeyTime="0" Value="1"/>
                                            </DoubleAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Selected"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{StaticResource Dark_Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" d:LayoutOverrides="Width"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

И применить стиль

<ListBox ItemContainerStyle="{StaticResource NoSelectListBoxItemStyle}" />
...