Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF ListView:如何像在资源管理器中那样使用圆角设置选定项的样式_C#_Wpf_Xaml_Listview_Styles - Fatal编程技术网

C# WPF ListView:如何像在资源管理器中那样使用圆角设置选定项的样式

C# WPF ListView:如何像在资源管理器中那样使用圆角设置选定项的样式,c#,wpf,xaml,listview,styles,C#,Wpf,Xaml,Listview,Styles,这是之前提出的一个问题的链接,该问题与树视图有关: 我的问题是:如何在ListView上迁移此解决方案 答案有点混乱,所以我不明白那里发生了什么 我觉得这个问题听起来很熟悉。:) 因此,您应该能够使用相同的代码,然后使用VisualStudio查找TreeView并将其替换为ListView。当然,还有一些部分,如Image.Source和IsMouseDirectlyVeritem帮助程序,您可能需要更仔细地修改。在大多数情况下,查找和替换功能应该可以工作TreeView和ListView具

这是之前提出的一个问题的链接,该问题与树视图有关:

我的问题是:如何在ListView上迁移此解决方案


答案有点混乱,所以我不明白那里发生了什么

我觉得这个问题听起来很熟悉。:)

因此,您应该能够使用相同的代码,然后使用VisualStudio查找
TreeView
并将其替换为
ListView
。当然,还有一些部分,如
Image.Source
IsMouseDirectlyVeritem
帮助程序,您可能需要更仔细地修改。在大多数情况下,查找和替换功能应该可以工作
TreeView
ListView
具有完全相同的属性

如果您在这方面有任何问题,请告诉我

您可以将
HierarchycalDataTemplate
更改为如下所示的普通模板:

<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>


如果我误解了你的问题,请告诉我。

我觉得这个问题听起来很熟悉。:)

因此,您应该能够使用相同的代码,然后使用VisualStudio查找
TreeView
并将其替换为
ListView
。当然,还有一些部分,如
Image.Source
IsMouseDirectlyVeritem
帮助程序,您可能需要更仔细地修改。在大多数情况下,查找和替换功能应该可以工作
TreeView
ListView
具有完全相同的属性

如果您在这方面有任何问题,请告诉我

您可以将
HierarchycalDataTemplate
更改为如下所示的普通模板:

<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>


如果我误解了你的问题,请告诉我。

我觉得这个问题听起来很熟悉。:)

因此,您应该能够使用相同的代码,然后使用VisualStudio查找
TreeView
并将其替换为
ListView
。当然,还有一些部分,如
Image.Source
IsMouseDirectlyVeritem
帮助程序,您可能需要更仔细地修改。在大多数情况下,查找和替换功能应该可以工作
TreeView
ListView
具有完全相同的属性

如果您在这方面有任何问题,请告诉我

您可以将
HierarchycalDataTemplate
更改为如下所示的普通模板:

<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>


如果我误解了你的问题,请告诉我。

我觉得这个问题听起来很熟悉。:)

因此,您应该能够使用相同的代码,然后使用VisualStudio查找
TreeView
并将其替换为
ListView
。当然,还有一些部分,如
Image.Source
IsMouseDirectlyVeritem
帮助程序,您可能需要更仔细地修改。在大多数情况下,查找和替换功能应该可以工作
TreeView
ListView
具有完全相同的属性

如果您在这方面有任何问题,请告诉我

您可以将
HierarchycalDataTemplate
更改为如下所示的普通模板:

<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时,如果此ListView的父控件也是ListView(或TreeView),则最后选择的ListView也始终保持选中状态。。。我认为这是因为它独立于其他孩子。

嗯,我做了一些改变,我认为现在它工作得更好了:

<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>