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

Событие WPF MouseDown не срабатывает повсюду в элементе управления

В настоящее время я борюсь с другой борьбой WPF, а именно с mouseEvents. У меня в основном есть очень простой элемент управления (a Border, содержащий Grid, который сам имеет несколько TextBlocks). Я пытаюсь добиться простого поведения: двойной щелчок должен превратить элемент управления в режим редактирования (который на самом деле скрывает привязку TextBlocks с TextBoxes к тем же данным.

Ничего особенного, не так ли? Ну, я боюсь. MouseDoubleClick, связанный с моим UserControl, просто срабатывает, когда я нажимаю элемент управления (например, щелкнув на текстовом блоке). Если я нахожу свободное пространство между TextBlocks, ничего не запускается. Даже MouseDown.

Как я могу заставить его работать, чтобы поймать каждый щелчок мышью? Я предположил, что привязка события MouseDown к Border должна ловить каждый клик на границе, но... он не попал в клики на пустые части границы.

Вот код проекта, который я сделал для его запуска:

XAML:

<StackPanel Orientation="Vertical">
    <Border Height="400" Width="400" HorizontalAlignment="Center" VerticalAlignment="Center" BorderBrush="Black" BorderThickness="2"
        MouseDown="Border_MouseDown" MouseUp="Border_mouseUp">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

            <TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>

    </Border>

    <TextBlock Height="100" Width="300" HorizontalAlignment="Center" TextAlignment="Center" x:Name="thetext" Visibility="Collapsed"
               Foreground="White" Background="Red" Text="CLICKED!" />
</StackPanel>

Код позади:

private void Border_MouseDown(object sender, MouseButtonEventArgs e)
    {
        thetext.Visibility = Visibility.Visible;
    }

    private void Border_mouseUp(object sender, MouseButtonEventArgs e)
    {
        thetext.Visibility = Visibility.Collapsed;
    }

Теперь попробуйте нажать один из текстов "BLUFF": появится текст "CLICKED". Попробуйте щелкнуть в другом месте, между TextBlocks: ничего не происходит.

Спасибо!

4b9b3361

Ответ 1

<StackPanel Background="Transparent" ...

или

<Border Background="Transparent" ...

должен сделать трюк...

Это делает сетку прозрачной, однако видимой для щелчков мыши.

Посмотрите здесь в форме дополнительной информации.

Есть еще несколько cirmumstances, где вам нужно использовать PreviewXXX -Event, это когда дочерний элемент "проглатывает" событие, но в вашем случае вышеупомянутое shpould то, что вы ищете.