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事件,但在它被引发后,我不知道我点击了哪个图像。我只知道有咔哒一声。我怎样才能找到被点击的图片?
使用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.MouseDown
或Image.MouseUp
事件。
如果这有效
image.MouseDown += (e, v) => { //enter your code };
我仍然建议您使用MVVM,并通过CommandBinding绑定命令。
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx