我在WPF窗口的Window.Resources中有以下代码。它基本上要做的是创建一个代表网格的项目,其中标签位于左侧,按钮位于右侧。当我将鼠标悬停在标签或按钮上时,行会按预期更改颜色,但是如果鼠标悬停在任何行上,我希望它也更改颜色。
如何做到这一点?
任何帮助表示赞赏。
<Window.Resources>
<dtos:ProjectDto x:Key="data"/>
<Style x:Key="alternatingWithTriggers"
TargetType="{x:Type ContentPresenter}">
<Setter Property="Height" Value="25"></Setter>
</Style>
<Style x:Key="onmouseover" TargetType="{x:Type DockPanel}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow">
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="ItemTemplate">
<Border x:Name="ItemBorder" HorizontalAlignment="Stretch" BorderThickness="0" Background="#BBB" ClipToBounds="True" >
<DockPanel ClipToBounds="True" HorizontalAlignment="Stretch" Style="{StaticResource onmouseover}">
<Label Content="{Binding Name}" HorizontalAlignment="Left" Height="80"></Label>
<Button Content="Delete" HorizontalAlignment="Right" Margin="0,0,10,0"/>
</DockPanel>
</Border>
...
最佳答案
在您发布的代码段中,我看不到任何明显的错误,而且由于我不在Studio的前面,所以无法尝试,但是如果我是您,我会尝试添加MouseEnter
DockPanel上的处理程序(只需在视图的代码后面扔空操作处理程序,因为稍后会删除它)。
确保在您进入时单击处理程序,并在调试器/立即窗口中确保IsMouseOver
属性与您期望的一样。这至少将指导您接下来的调试步骤:
如果IsMouseOver
为true并且您的处理程序被命中,那么我猜想可能与您设置的触发器不符。
如果IsMouseOver
为false或未命中您的处理程序,那么我的猜测可能是IsHitTestVisible
设置为false或类似的东西。
只是为了好玩,我还尝试将样式声明内联移动到扩展面板上,以确保像这样:
<DataTemplate x:Key="ItemTemplate">
<Border x:Name="ItemBorder" HorizontalAlignment="Stretch" BorderThickness="0" Background="#BBB" ClipToBounds="True" >
<DockPanel ClipToBounds="True" HorizontalAlignment="Stretch">
<DockPanel.Style>
<Style TargetType="{x:Type DockPanel}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>
</DockPanel.Style>
<Label Content="{Binding Name}" HorizontalAlignment="Left" Height="80"></Label>
<Button Content="Delete" HorizontalAlignment="Right" Margin="0,0,10,0"/>
</DockPanel>
</Border>
关于c# - WPF ItemsControl IsMouseOver无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1985987/