HOWTO: запуск события, когда мышь находится на одной из сторон и углов границы WPF - PullRequest
0 голосов
/ 20 января 2019

Обычно у меня есть граница WPF, и я хотел бы запустить событие, когда мышь находится на одной из сторон и углов:

  • левый
  • Верхний левый угол
  • Нижний левый угол
  • правый
  • Верхний правый угол
  • Нижний правый угол
  • Top
  • Bottom

Мне нужно определить, когда мышь находится на каждом из них, чтобы вызвать разные события.

Как я могу это сделать?

1 Ответ

0 голосов
/ 20 января 2019

Вместо того, чтобы обнаруживать события мыши непосредственно на Border, вы можете поместить слой элементов управления поверх Border и обнаруживать на них события мыши. Самый простой способ нанести этот слой - использовать Grid и использовать простые Border s в качестве элементов управления:

<Grid>
    <!-- Your border -->
    <Border
        BorderThickness="1"
        BorderBrush="LightBlue"
        Width="100" Height="100"
        >
        <!-- Contents -->
    </Border>

    <Grid
        Width="100" Height="100"
        >
        <Grid.RowDefinitions>
            <RowDefinition Height="5" />
            <RowDefinition Height="*" />
            <RowDefinition Height="5" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
        </Grid.ColumnDefinitions>

        <Border
            Grid.Row="0" Grid.Column="0"
            Background="Transparent"
            MouseEnter="OnMouseEnterTopLeft"
            />
        <Border
            Grid.Row="0" Grid.Column="1"
            Background="Transparent"
            MouseEnter="OnMouseEnterTop"
            />
        <Border
            Grid.Row="0" Grid.Column="2"
            Background="Transparent"
            MouseEnter="OnMouseEnterTopRight"
            />
        <Border
            Grid.Row="1" Grid.Column="0"
            Background="Transparent"
            MouseEnter="OnMouseEnterLeft"
            />
        <Border
            Grid.Row="1" Grid.Column="2"
            Background="Transparent"
            MouseEnter="OnMouseEnterRight"
            />
        <Border
            Grid.Row="2" Grid.Column="0"
            Background="Transparent"
            MouseEnter="OnMouseEnterBottomLeft"
            />
        <Border
            Grid.Row="2" Grid.Column="1"
            Background="Transparent"
            MouseEnter="OnMouseEnterBottom"
            />
        <Border
            Grid.Row="2" Grid.Column="2"
            Background="Transparent"
            MouseEnter="OnMouseEnterBottomRight"
            />
    </Grid>
</Grid>

Обратите внимание, что размеры Border и Grid должны быть одинаковыми, чтобы они идеально совпали. Они не должны быть фиксированного размера, как я показал здесь; они могут растянуться внутри своего контейнера.

В определениях Grid для строк и столбцов я выбрал размер обнаружения 5 пикселей, но, конечно, вы можете выбрать любой нужный вам размер. Кроме того, каждый Border внутри Grid должен иметь Background, установленный на Transparent; в противном случае событие мыши не обнаруживается.

...