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

Если вы хотите использовать Simple for Loop Then

data = [['Ben', 'Manager', 3000], ['James', 'Cleaner', 1000], ['Ken', 'Supervisor', 2000]]
for x in data:
    if 'Ben' in x:
        x[-1] = 1500
print(data) 
#Output: [['Ben', 'Manager', 1500], ['James', 'Cleaner', 1000], ['Ken', 'Supervisor', 2000]]
-1
задан user1624552 20 January 2019 в 01:11
поделиться

1 ответ

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

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

0
ответ дан redcurry 20 January 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: