В настоящее время я борюсь с другой борьбой 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: ничего не происходит.
Спасибо!