Стиль ListViewItem в ResourceDictionary - PullRequest
       0

Стиль ListViewItem в ResourceDictionary

4 голосов
/ 25 октября 2010

У меня есть следующее окно, в котором отображается список.Я определил стиль для ListViewItem:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                        <Style.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="True" />
                                    <Condition Property="IsSelected" Value="False"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" Value="Red" />
                            </MultiTrigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="Blue" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <DockPanel>
        <ListView x:Name="listView"/>
    </DockPanel>
</Window>

Код просто определяется как:

        public MainWindow()
        {
            InitializeComponent();
            for (int i = 1; i <= 100; i++)
            {
                listView.Items.Add(i);
            }
        }

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

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsMouseOver" Value="True" />
                        <Condition Property="IsSelected" Value="False"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="Background" Value="Red" />
                </MultiTrigger>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="Blue" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <DockPanel>
        <ListView x:Name="listView"/>
    </DockPanel>
</Window>

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

Есть идеи?

Редактировать:

Я заметил, что мой цвет фона IsSelected не определяется.Если я установлю его, например, на Зеленый, выбранные элементы по-прежнему будут использовать выбранный по умолчанию цвет Windows.

1 Ответ

2 голосов
/ 25 октября 2010

Если бы эта проблема существовала раньше, выбранный цвет фона ListViewItem должен быть установлен с

<Style.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Black"/>
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Gray"/>
</Style.Resources>

Я никогда не понимал причину этого .. Возможно, кто-то еще здесь может объяснить.

И для первой части, если вы поместите этот стиль в отдельный словарь ресурсов, он будет работать следующим образом. (Не знаю, почему вы получаете эффект, который вы получаете)

Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Gray"/>
        </Style.Resources>
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True" />
                    <Condition Property="IsSelected" Value="False"/>
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
            </MultiTrigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

MainWindow

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary1.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<DockPanel Name="c_dockPanel">
    <ListView x:Name="listView"/>
</DockPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...