WPF - Как написать триггер для мыши над сеткой? - PullRequest
14 голосов
/ 31 декабря 2008

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

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

Спасибо Malcolm

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

Ответы [ 2 ]

34 голосов
/ 22 марта 2011

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

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

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

Поэтому может показаться, что свойство IsMouseOver не работает (особенно если вы используете в триггере для установки свойства 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>

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

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

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

<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

0 голосов
/ 18 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...