WPF MouseDown事件不是在控件中处处都在发生。

问题描述 投票:24回答:1

我目前正在与另一个WPF斗争,即鼠标事件。

我基本上有一个非常简单的控件(一个 Border 含有 Grid 这本身就有一些 TextBlocks). 我试图实现一个简单的行为。双击应该将控件转入编辑模式(事实上,这隐藏了 TextBlocksTextBoxes 绑定到相同的数据。

没什么花哨的,对吧?好吧,我还是在努力。这个... MouseDoubleClick 连接到我的 UserControl 只是当我点击一个控件时才会启动(例如,点击一个 TextBlock). 如果我点击 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 "文本。一个 "点击 "文本将出现。尝试点击其他地方,在TextBlocks之间。什么都没有发生。

谢谢你!我目前正在与另一个WPF斗争。

c# wpf xaml events mouseevent
1个回答
41
投票
<StackPanel Background="Transparent" ... >

<Border Background="Transparent" ... >

应该可以做到这一点...

这使得网格是透明的,但鼠标点击时可见。

此处 形成更多信息。

在其他一些情况下,您必须使用的是 PreviewXXX- 事件,这时一个子元素会把事件 "吞掉",但在你的情况下,上面的内容应该是你要找的。

© www.soinside.com 2019 - 2024. All rights reserved.