c# WPF希望Stackpanel的子面板点击

本文关键字:WPF 希望 Stackpanel | 更新日期: 2023-09-27 18:18:56

我正在使用StackPanels。在我的应用程序中,我必须显示3到x图像的多tiff,并且必须在我单击其中一个后在新窗口中打开它们。

展示它们很容易:

public void Bilder_anzeigen(string path)
{
    TiffBitmapDecoder decoder = new TiffBitmapDecoder(new Uri(path), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    foreach (var i in decoder.Frames)
    {
        Image myImage = new Image();
        myImage.Source = i;
        Stackpanel_Tiff.Children.Add(myImage);
    }
}

但是我怎么能得到一个孩子点击StackPanel?有一个MouseDown事件,但在它被引发后,我不知道我点击了哪个图像。我只知道有咔哒一声。我怎样才能找到被点击的图片?

c# WPF希望Stackpanel的子面板点击

使用PreviewMouseDown事件和MouoseButtonEventArgs对象的OriginalSource可以很容易地找到被点击的Image:

<StackPanel PreviewMouseDown="StackPanel_PreviewMouseDown">
    <Image Source="Images/Add_16.png" Stretch="None" />
    <Image Source="Images/Edit_16.png" Stretch="None" />
    <Image Source="Images/Copy_16.png" Stretch="None" />
</StackPanel>

private void StackPanel_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.OriginalSource is Image)
    {
        string imageSource = ((Image)e.OriginalSource).Source.ToString();
    }
}

Try OriginalSource of eventargs。OriginalSource给出MouseDown

的控件
       private void Sp_MouseDown_1(object sender, MouseButtonEventArgs e)
    {
        var image=e.OriginalSource as Image;
    }

在你的StackPanel的MouseDown事件中,你可以尝试;

if (e.OriginalSource is Image)
{
    var tapImage = (Image)e.OriginalSource;
    //tapImage is the Image on which user tapped.
}

您可以使用Image.MouseDownImage.MouseUp事件。

如果这有效

 image.MouseDown += (e, v) => { //enter your code };

我仍然建议您使用MVVM,并通过CommandBinding绑定命令。

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx