Вместо того, чтобы обнаруживать события мыши непосредственно на 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
; в противном случае событие мыши не обнаруживается.