0

我正在学习 wpf 中的路由事件,并尝试以下示例,

文件——Window1.xaml

<ScrollViewer VerticalScrollBarVisibility="Auto">
    <UniformGrid MouseDown="UniformGrid_MouseDown">
        <Button x:Name="Button1">1</Button>
        <Button x:Name="Button2">2</Button>
        <Button x:Name="Button3">3</Button>
        <Button x:Name="Button4">4</Button>
        <Button x:Name="Button5">5</Button>
        <Button x:Name="Button6">6</Button>
        <Button x:Name="Button7">7</Button>
        <Button x:Name="Button8">8</Button>
        <Button x:Name="Button9">9</Button>
    </UniformGrid>
</ScrollViewer>

文件——Window1.xaml.cs

private void UniformGrid_MouseDown(object sender, MouseButtonEventArgs e)
{
    Button aTargetButton = e.Source as Button;
    if (aTargetButton != null)
    {
        aTargetButton.Background = Brushes.Azure;
        aTargetButton.LayoutTransform = new RotateTransform(45);
        if (myPreviouslyClickedButton != null)
        {
            myPreviouslyClickedButton.Background = Brushes.White;
            myPreviouslyClickedButton.LayoutTransform = new RotateTransform(0);
        }
        myPreviouslyClickedButton = aTargetButton;
    }
}

当我运行这些代码片段时,只有当我右键单击相应的按钮时(即使我已经订阅了 MouseDown),相应的按钮才会经历角度转换。你能帮我解决这个问题吗?

更新:

如果我用椭圆替换按钮,这个片段似乎有效。当椭圆可以时,为什么按钮不能对左键做出反应。如果我多次单击同一个椭圆,也不会引发事件

4

2 回答 2

1

您的鼠标按下事件正在由按钮处理。

如果您希望您的网格处理按钮事件,那么您可以执行以下操作:

 <ScrollViewer VerticalScrollBarVisibility="Auto">
    <UniformGrid Button.Click="UniformGrid_Click">
        <Button x:Name="Button1" Margin="10">1</Button>
        <Button x:Name="Button2">2</Button>
        <Button x:Name="Button3">3</Button>
        <Button x:Name="Button4">4</Button>
        <Button x:Name="Button5">5</Button>
        <Button x:Name="Button6">6</Button>
        <Button x:Name="Button7">7</Button>
        <Button x:Name="Button8">8</Button>
        <Button x:Name="Button9">9</Button>
    </UniformGrid>
    </ScrollViewer>

并将源更改为:

private void UniformGrid_Click(object sender, RoutedEventArgs e)
    {
        // Your code here
    }

这里有一篇 msdn 文章值得一读。

于 2009-06-03T17:33:39.983 回答
0

这工作正常。在内部,Button处理MouseDown事件以知道何时触发其Click事件。我发现Snoop是跟踪 WPF 事件问题或只是更好地了解它们如何工作的好工具。

于 2009-06-03T17:27:13.377 回答