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

Dam*_*cus 22 c# wpf events xaml mouseevent

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

没什么好看的吧?好吧,我还在挣扎.该MouseDoubleClick链接到我UserControl时,我在控制点击(如,单击一个文本块)刚刚火灾.如果我点击之间的空白区域TextBlocks,则不会触发任何内容.不是MouseDown.

我怎么能让它工作,以便抓住每一次鼠标点击?我认为将MouseDown事件链接到a 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>
Run Code Online (Sandbox Code Playgroud)

代码背后:

private void Border_MouseDown(object sender, MouseButtonEventArgs e)
    {
        thetext.Visibility = Visibility.Visible;
    }

    private void Border_mouseUp(object sender, MouseButtonEventArgs e)
    {
        thetext.Visibility = Visibility.Collapsed;
    }
Run Code Online (Sandbox Code Playgroud)

现在尝试单击其中一个"BLUFF"文本:将出现"已点击"文本.尝试点击TextBlocks之间的其他地方:没有任何反应.

谢谢!

HCL*_*HCL 34

<StackPanel Background="Transparent" ...
Run Code Online (Sandbox Code Playgroud)

要么

<Border Background="Transparent" ...
Run Code Online (Sandbox Code Playgroud)

应该做的诀窍......

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

看看这里形成更多的信息.

还有一些其他的情况,你必须使用-Event,PreviewXXX这是当一个子元素"吞下"事件时,但在你的情况下,上面说的是你正在寻找的东西.

  • 好.这出乎意料地容易 - 而且很愚蠢.感谢您及时回复.我一直认为默认背景颜色是透明的.非常感谢!有一天WPF战斗 (6认同)