代码之家  ›  专栏  ›  技术社区  ›  Burt

WPF项控件IsMouseOver未按预期工作

  •  2
  • Burt  · 技术社区  · 15 年前

    我在窗口中有以下代码。WPF窗口的资源。它的基本工作是创建一个表示网格的项,其中标签位于左侧,按钮位于右侧。当我将鼠标悬停在标签或按钮上时,行将按预期改变颜色,但如果鼠标悬停在任何行上,我希望它也改变颜色。

    如何实现这一目标?

    感谢您的帮助。

    <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>
    ...
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   John Kugelman Syzygies    12 年前

    我看不出在你发布的片段中有什么明显的错误,而且由于我不在工作室前面,所以我无法尝试,但如果我是你,我会尝试添加一个 MouseEnter DockPanel上的处理程序(只需将DoNothing处理程序放在视图的代码后面,因为稍后将删除它)。

    确保进入时处理程序受到攻击,并使用调试器/即时窗口确保 IsMouseOver 属性和您期望的一样。这至少会指导您接下来的调试步骤:

    如果 伊斯穆塞弗 是真的,你的处理程序被击中了,那么我猜你设置的触发器可能不太正确。

    如果 伊斯莫赛弗 如果是假的,或者你的处理程序没有被击中,那么我猜应该是 IsHitTestVisible 设置为“假”或类似的内容。

    为了好玩,我还尝试将样式声明内联移动到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> 
    
        2
  •  8
  •   RandomEngy    15 年前

    给码头面板 Background="Transparent" . 这样就可以捕获鼠标事件。