WPF ListView: как оформить выбранные элементы закругленными углами, как в Проводнике

Это ссылка на заданный ранее вопрос, касающийся TreeView:

WPF TreeView: как оформить выбранные элементы закругленными углами, как в Проводнике

Мой вопрос: как перенести это решение на ListView?

Ответы немного беспорядочные, поэтому я не поняла, что там происходит!

2 ответа

Решение

Я думал, что этот вопрос звучит знакомо.:)

Таким образом, вы должны просто иметь возможность использовать тот же код, но затем использовать Visual Studio для поиска и замены TreeView в ListView, Конечно, есть несколько частей, таких как Image.Source и IsMouseDirectlyOverItem помощник, который вам может потребоваться изменить более тщательно. По большей части функция Find and Replace должна работать. TreeView а также ListView иметь абсолютно одинаковые свойства.

Дайте мне знать, если у вас возникнут проблемы с этим.

Вы можете изменить свой HierarchicalDataTemplate к нормальному, как это:

<DataTemplate DataType="{x:Type viewmodels:ObjectBaseViewModel}">
    <StackPanel Orientation="Horizontal" Margin="2,1,5,2">
        <Grid Margin="0,0,3,0">
            <Image Name="icon" Source="/ExplorerTreeView/Images/folder.png"/>
        </Grid>
        <TextBlock Text="{Binding Name}" />
    </StackPanel>
</DataTemplate>

Дайте мне знать, если я неправильно понял вашу проблему.

Ну, я делаю некоторые изменения, и я думаю, что теперь это работает лучше:

<ListView ...>
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="BorderThickness" Value="1"/>
                <Style.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="helpers:ListViewHelper.IsMouseDirectlyOverItem" Value="False"/>
                            <Condition Property="IsSelected" Value="False"/>
                            <Condition Property="IsFocused" Value="false"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" Value="Transparent"/>
                        <Setter Property="BorderBrush" Value="Transparent"/>
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="helpers:ListViewHelper.IsMouseDirectlyOverItem" Value="True"/>
                            <Condition Property="IsSelected" Value="False"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                    <GradientStop Color="#FFF8F8F8" Offset="0"/>
                                    <GradientStop Color="#FFE5E5E5" Offset="1"/>
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="BorderBrush" Value="#D9D9D9"/>
                    </MultiTrigger>

                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsFocused" Value="True"/>
                            <Condition Property="IsSelected" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                    <GradientStop Color="#FFFAFBFD" Offset="0"/>
                                    <GradientStop Color="#B8D6FB " Offset="1"/>
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="BorderBrush" Value="#D9D9D9"/>
                    </MultiTrigger>
                </Style.Triggers>
                <Style.Resources>
                    <Style TargetType="Border">
                        <Setter Property="CornerRadius" Value="2"/>
                    </Style>
                </Style.Resources>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
             ...   
            </DataTemplate>

        </ListView.ItemTemplate>
        <ListView.Resources>

            <!-- Brushes for the selected item -->
            <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFFAFBFD" Offset="0"/>
                <GradientStop Color="#B8D6FB " Offset="1"/>
            </LinearGradientBrush>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
        </ListView.Resources>
    </ListView>

Проблема, с которой я столкнулся при последнем ответе, заключается в следующем: если, например, родительский элемент управления этого ListView также является ListView (или TreeView), когда вы переключаете щелчки с listView на другой, последний выбранный ListView всегда остается выбранным тоже. Я думаю, потому что это не зависит от других детей.

Другие вопросы по тегам