6

現在、単純なグリッド上の画像からマウスダウンをキャプチャしようとしています。イベントの発火に問題はありません。2 回発火するだけです。また、2 回クリックすると最終的に別の状態になるため (拡大画像が表示されます)、そのまま 2 回目のクリックを行うと問題が発生します。

私の現在のコードは次のとおりです。

XAML

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Background="Transparent" x:Name="MainContent" MouseDown="Generic_MouseDown">
        <Image Source="http://www.blogcdn.com/www.engadget.com/media/2011/05/welcome-kansas-city-google-high-speed-internet.jpg" Height="100" Width="100" MouseDown="Generic_MouseDown"/>
    </Grid>
</Window>

コード:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Generic_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (((FrameworkElement)e.Source).GetType() == typeof(System.Windows.Controls.Image))
        {
            Console.Out.WriteLine("image clicked");
        }
        else
        {
            Console.Out.WriteLine("grid clicked");
        }

    }
}

そのため、画像をクリックすると、マウスダウンが 2 回発生します。

ありがとう!

4

3 に答える 3

16
private void Generic_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (((FrameworkElement)e.Source).GetType()   
           == typeof(System.Windows.Controls.Image))
    {
        Debug.WriteLine("image clicked");
        e.Handled = true;
    }
    else
    {
        Debug.WriteLine("grid clicked");
    }

}

Handled プロパティを true に設定する必要があります。

于 2011-05-17T17:57:33.437 に答える
6

イベントがイメージからグリッドにバブリングしないようにするには、e.Handled を true に設定する必要があります。

事実上、イベントはイメージで発生し、処理されない場合はグリッドで発生し、ビジュアル ツリーで発生します。

于 2011-05-17T17:55:38.143 に答える
2

これはXAMLであり、[MouseDown ="Generic_MouseDown"]をグリッドと画像に2回追加しました

<Window x:Class="WpfApplication.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid Background="Transparent" x:Name="MainContent" MouseDown="Generic_MouseDown">
            <Image Source="http://www.blogcdn.com/www.engadget.com/media/2011/05/welcome-kansas-city-google-high-speed-internet.jpg" Height="100" Width="100" MouseDown="Generic_MouseDown"/>
        </Grid>
    </Window>

グリッドでその1つ[MouseDown="Generic_MouseDown"]のようにします

<Window x:Class="WpfApplication.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid Background="Transparent" x:Name="MainContent" MouseDown="Generic_MouseDown">
            <Image Source="http://www.blogcdn.com/www.engadget.com/media/2011/05/welcome-kansas-city-google-high-speed-internet.jpg" Height="100" Width="100" />
        </Grid>
    </Window>

また

画像内のその1つ[MouseDown="Generic_MouseDown"]のようにします

<Window x:Class="WpfApplication.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid Background="Transparent" x:Name="MainContent">
            <Image Source="http://www.blogcdn.com/www.engadget.com/media/2011/05/welcome-kansas-city-google-high-speed-internet.jpg" Height="100" Width="100" MouseDown="Generic_MouseDown"/>
        </Grid>
    </Window>
于 2011-05-17T23:11:28.660 に答える