WPF MouseDown事件不会在控件中到处触发

时间:2014-04-01 08:53:02

标签: c# wpf xaml events mouseevent

我目前正在与另一场WPF斗争作斗争,即mouseEvents。 我基本上有一个非常简单的控件(Border包含一个Grid,它本身有一些TextBlocks)。我试图实现一个简单的行为:双击应该将控件转换为编辑模式(实际上隐藏TextBlocksTextBoxes绑定到相同的数据。

没什么特别的,对吗?好吧,我还在挣扎。当我点击一个控件时(例如,单击一个文本块),链接到MouseDoubleClick的{​​{1}}就会触发。如果我点击UserControl之间的空格,则不会触发任何内容。甚至不是TextBlocks

我怎样才能使它能够捕获每一次鼠标?我认为将MouseDown事件与MouseDown相关联应该会抓住边框上的每次点击,但是......最终没有抓住边框空白部分的点击次数。

以下是我为您制作的一些草案代码:

XAML:

Border

代码背后:

<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>

现在尝试点击其中一个&#34; BLUFF&#34;文本:A&#34;点击&#34;文字将出现。尝试点击TextBlocks之间的其他地方:没有任何事情发生。

谢谢!

1 个答案:

答案 0 :(得分:31)

<StackPanel Background="Transparent" ...

<Border Background="Transparent" ...

应该做的伎俩...

这使网格变得透明,但鼠标点击却可见。

查看here表单了解更多信息。

还有一些其他的情况,你必须使用PreviewXXX - 事件,这是一个儿童元素&#34;吞下&#34;事件发生了,但在你的情况下,上面的内容可能是你要找的东西。