WPF MouseDown event not firing everywhere in a control
c#, events, mouseevent, wpf, xaml
Solution
<StackPanel Background="Transparent" ... >
or
<Border Background="Transparent" ... >
should do the trick...
This makes the grid transparent, however visible for mouse-clicks.
Look here form more Information.
There are some other circumstances, where you have to use the `PreviewXXX`- event, this is when a child element "swallows" the event away, but in your case, the above should be what you're looking for.
Problem
I am currently fighting against another WPF struggle, namely mouse events. I basically have a very simple control (a `Border` containing a `Grid` which itself has a few `TextBlocks`). I am trying to achieve a simple behavior: Double click should turn the control into edit mode (which in fact hides the `TextBlocks` with `TextBoxes` bound to the same data. Nothing fancy, right? Well still, I'm struggling. The `MouseDoubleClick` linked to my `UserControl` just fires when I click in a control (like, clicking ON a `TextBlock`). If I click on an empty space between `TextBlocks`, nothing is fired. Not even `MouseDown`. How could I make it work so as to catch every mouse click? I assumed that linking a `MouseDown` event to a `Border` should catch every click on the border but... it ended up not catching clicks on empty parts of the border. Here is some draft code I made for you to run it: 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> ``` Code behind: ``` private void Border_MouseDown(object sender, MouseButtonEventArgs e) { thetext.Visibility = Visibility.Visible; } private void Border_mouseUp(object sender, MouseButtonEventArgs e) { thetext.Visibility = Visibility.Collapsed; } ``` Now try to click one of the "BLUFF" texts: A "CLICKED" Text will appear. Try clicking somewhere else, between the TextBlocks: Nothing happens. Thank you!