我在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>
...
答案 0 :(得分:8)
提供DockPanel Background="Transparent"
。这应该允许它捕获鼠标事件。
答案 1 :(得分:1)
我发布的片段中没有看到任何明显错误,因为我不在Studio前面,我无法尝试,但如果我是你,我会尝试添加一个DockPanel上的MouseEnter
处理程序(只是在视图的代码隐藏中抛出do-nothing处理程序,因为稍后你将删除它)。
确保在输入时遇到处理程序,并使用调试器/立即窗口确保IsMouseOver
属性符合您的预期。这至少会指导您的下一个调试步骤:
如果IsMouseOver
为真并且您的处理程序被命中,那么我的猜测就是您设置的触发器不太正确。
如果IsMouseOver
为false或您的处理程序未命中,那么我的猜测就像IsHitTestVisible
设置为false或类似的东西。
为了好玩,我还尝试将内联样式声明移动到dockpanel,以确保如此:
<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>