我在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/

10-09 19:47