【发布时间】:2019-02-22 10:52:36
【问题描述】:
我是 WPF 新手,所以我的代码可能有点奇怪。很抱歉。
我想更改ListView 的默认 MouseOver 和 Selected 事件。按照网上的说明,我尝试更改ControlTemplate,但效果不佳(默认事件消失,但MouseOver时没有任何反应)。
然后我在ContentPresenter之外添加一个边框,并让触发器改变边框的背景。它有效,但不正确。我的目的是展示这样的东西。
┌──────────────────────────────────────┐
│ ┌─────┐ ────TEXT───────── │
│ │ │ ────TEXT───────── │
│ │ IMG │ │
│ │ │ │
│ │ │ Mouse Here, Not Trigger │
│ └─────┘ │
└──────────────────────────────────────┘ ← Enter Here
如果我的鼠标进入右下角的列表项并且没有在图像或文本上移动,则背景不会改变。如果我点击,它不会被选中。
如果您能告诉我显示数据的正确方式(更多 WPF 方式)而不是仅仅修复模板问题,我们将不胜感激。
ControlTemplate:
<Style TargetType="ListView" x:Key="ListViewStyle"
... // Style for ListView
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border x:Name="ListViewItemBorder">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="ListViewItemBorder" Value="DimGray"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" TargetName="ListViewItemBorder" Value="DimGray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
列表视图:
<ListView x:Name="ListViewCollections" ItemsSource="{Binding}" Style="{StaticResource ListViewStyle}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel Style="{StaticResource DockPanelStyle}"> // LastChildFill=False
<Image Source="{Binding something}"/>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding something}"/>
<TextBlock Text="{Binding something}"/>
</StackPanel>
</DockPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView
【问题讨论】:
-
您只是想更改您要完成的任务的默认颜色吗?
-
@mm8 是的,背景和边框。
标签: c# wpf xaml listview controltemplate