WPF网格控件的IsMouseOver属性

17

WPF Grid具有一个名为“IsMouseOver”的属性,您可以在Grid的样式触发器中使用。

我的问题是,“IsMouseOver”属性仅在鼠标悬停在Grid内的某些控件(例如Button或ComboBox)上时才会更改。

例如:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="25" />
    <ColumnDefinition />
  </Grid.ColumnDefinitions>

  <Button Grid.Column="1">A Button</Button>

  <Grid.Style>
    <Style TargetType="{x:Type Grid}">
      <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="False">
          <Setter Property="Opacity" Value="0.5"></Setter>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="True">
          <Setter Property="Opacity" Value="1"></Setter>
        </Trigger>
      </Style.Triggers>
    </Style>
  </Grid.Style>
</Grid>

以上的网格及其内容将被显示为半透明,以便您可以看到控件。

如果您将鼠标悬停在不包含任何内容的第一列上,您会注意到不会将不透明度设置为完全不透明。

但是,如果您将鼠标悬停在第二列中的按钮上,则不透明度将被设置为完全不透明。

在我的应用程序中,我设置触发器的网格被显示在图像控件的顶部。我不希望在鼠标悬停在图像上之前显示网格...换句话说,由于网格位于图像的上方,因此只有当鼠标悬停在网格上时(网格的任何位置),我才希望显示网格,因为网格位于图像的上方。

有谁知道如何实现这一点?

谢谢!

-Frinny

2个回答

32

你的问题是Grid本身没有背景色,因此无法进行命中测试。尝试使用以下代码替换:

<Grid Background="Transparent">

13

将网格背景设置为透明,然后它应该可以工作。

关于为什么这样做的详细信息,请在这里查看


非常感谢您的回复!额外的信息很有帮助。 - Frinavale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接