Подтвердить что ты не робот

WPF - Как написать триггер для мыши над сеткой?

Я вижу, что объект Button имеет свойство IsMouseOVer.

Но как создать эффект для мыши над сеткой или другим элемент, который не имеет IsMouseOver??

Спасибо Malcolm

Изменить: я понял это. Я использовал неправильный метод установки триггера.

4b9b3361

Ответ 1

Я понимаю, что я отвечаю на мертвую нить, но так как я наткнулся на нее, и поскольку нить не ответила, я собираюсь ответить на нее.

WPF Grid имеет свойство IsMouseOver.

Я думаю, что этот вопрос задан, потому что свойство IsMouseOver изменяется только в том случае, если мышь находится над некоторым элементом управления (например, Button или ComboBox) внутри самой Grid.

Следовательно, может показаться, что свойство IsMouseOver не работает (особенно если вы используете триггер для установки свойства Grid Visible).

Например:

<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>

Вышеуказанная Сетка и ее содержимое будут отображаться с половинной непрозрачностью. Вы заметите, что непрозрачность не будет установлена ​​полностью, если вы наведите курсор на первый столбец (который ничего не содержит); однако непрозрачность будет установлена ​​полностью, если вы наведете курсор на кнопку во втором столбце. Это связано с тем, что первый столбец, в котором нет ничего, не подвержен ошибкам; тогда как кнопка во втором столбце подвержена проверке на удар, и поэтому событие запускается.

Если вы хотите, чтобы свойство Grid IsMouseOver обнаруживало, что мышь находится где-то над самой сеткой, все, что вам нужно сделать, это установить свойство Background для Grid на то, что не является Null (например, для параметра Transparent). Установка свойства Background сделает сетку "проверкой на удар".

Следующий код устранит проблему:

<Grid Background="Transparent">
  <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"></Setter>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="True">
          <Setter Property="Opacity" Value="1"></Setter>
        </Trigger>
      </Style.Triggers>
    </Style>
  </Grid.Style>
</Grid>

-Frinny

Ответ 2

Это будут действия "MouseEnter" и "MouseLeave" для объекта WPF.