私は現在、別のWPF闘争、すなわちmouseEventsと戦っています。私は基本的に非常にシンプルなコントロールを持っています(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」テキストの1つをクリックしてみます。「CLICKED」テキストが表示されます。 TextBlock間の別の場所をクリックしてみてください。何も起こりません。
ありがとうございました!
<StackPanel Background="Transparent" ...
または
<Border Background="Transparent" ...
トリックを行う必要があります...
これにより、グリッドは透明になりますが、マウスクリックでは表示されます。
詳細は こちら をご覧ください。
他にもいくつかの状況があり、PreviewXXX
- Eventを使用する必要があります。これは、子要素がイベントを「飲み込む」ときですが、あなたの場合、上記は探していたものです。