gpt4 book ai didi

wpf - 删除WPF ListView/GridView高亮镶边

转载 作者:行者123 更新时间:2023-12-04 05:01:30 25 4
gpt4 key购买 nike

我有带有GridView View 的WPF ListView,并且我想删除行高亮显示的任何痕迹。

可以在以下站点的一个答案中找到此有用的代码:

     <ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Control.Focusable" Value="False"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>

但是,尽管此更改有助于删除大部分突出显示,但并不能删除当鼠标移到ListView行上方时仍然出现的水平条。如何将其删除?

我已经处理了涉及Button的类似问题,并且找到了一种解决方案,该解决方案通过删除其镶边来更改Button模板。

在ListView/GridView的情况下,我无法找到要更改的相应镶边和模板。

最佳答案

如果已安装Windows SDK,则可以在以下位置找到所有默认样式的XAML源(假设您安装了示例):

%ProgramFiles%\Microsoft SDKs\Windows\v6.1\Samples\WPFSamples.zip



该zip文件包含一个文件夹Core,其中包含AeroTheme,LunaTheme等,其中包含默认样式的来源。不幸的是,这些文件很大(Aero约为8500行),并且结构或格式(IMO)都不够好。

ListViewItem的默认控件模板如下所示:
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border CornerRadius="2" SnapsToDevicePixels="True"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}">
<Border Name="InnerBorder" CornerRadius="1" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MaxHeight="11" />
<RowDefinition />
</Grid.RowDefinitions>

<Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" />
<GridViewRowPresenter Grid.RowSpan="2"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Grid>
</Border>
</Border>

<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource ListItemHoverFill}" />
<Setter Property="BorderBrush" Value="#FFCCF0FF" />
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
</Trigger>

<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
<Setter Property="BorderBrush" Value="#FF98DDFB" />
<Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" />
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
<Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" />
</Trigger>

<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="Selector.IsSelectionActive" Value="False" />
</MultiTrigger.Conditions>

<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" />
<Setter Property="BorderBrush" Value="#FFCFCFCF" />
</MultiTrigger>

<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>

<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" />
<Setter Property="BorderBrush" Value="#FF98DDFB" />
</MultiTrigger>

<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

删除所有突出显示的最佳选择可能是用您自己的ControlTemplate替换为只包含GridViewRowPresenter(可能在单个Border中)的ControlTemplate。别忘了包括在控件禁用时使项目变灰的触发器。

关于wpf - 删除WPF ListView/GridView高亮镶边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com