I am using StackPanels. In my application I have to show a multi tiff with 3 to x images and have to open them in a new window after I click on one of them.
Showing them is easy:
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);
}
}
But how can I get a child with a click on the StackPanel? There is a MouseDown Event, but after it is raised, I don't know on which image i clicked. I just know there was a click. How can I find the image that was clicked?
You can find out which Image
was clicked on very easily using the PreviewMouseDown
event and the OriginalSource
of the MouoseButtonEventArgs
object:
<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 give the control on which MouseDown
private void Sp_MouseDown_1(object sender, MouseButtonEventArgs e)
{
var image=e.OriginalSource as Image;
}
In your StackPanel's MouseDown Event, you can try;
if (e.OriginalSource is Image)
{
var tapImage = (Image)e.OriginalSource;
//tapImage is the Image on which user tapped.
}
see if this helps.
You can just use Image.MouseDown
or Image.MouseUp
event.
Alternatively, get control under mouse cursor .
while this works.
image.MouseDown += (e, v) => { //enter your code };
I would still recommend you to use MVVM and bind the command through CommandBinding.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.