从 StackPanel C# UWP 选择图像(将动作侦听器添加到 UIElement 并将图像添加到 UIElement)

Selecting image from StackPanel C# UWP (Adding action listener to UIElement and Image to UIElement)

我正在使用 C# 并正在创建 UWP 应用程序。 我正在使用 Windons.Ui.Xaml.Controls.Image 并且我创建了以下列出我的图像的代码

UxHelpers.DispatchToASTAThread(
async () =>
{
    imageIndex++;
    StackPanel stackPanel = new StackPanel();
    stackPanel.Children.Add(image);           
}
this.Results.Children.Add(stackPanel);
 }).Forget();

这是在 for 循环中,我希望当用户点击某个图像时能够保存它。

我有保存代码,我只是不知道如何为每个图像添加鼠标侦听器,以便在我将鼠标移到它上面时标记它(这样用户就知道点击它会发生什么)当他点击时,我希望它用这个图片索引调用我的函数....

我已经看过 UIElement,但我还是想不通。

谢谢!!

我们可以将 PointerEntered 事件添加到 Image 控件,当用户将鼠标移到它上面时,我们可以更改 UI。然后我们可以给Image控件添加Tapped事件,如果用户点击它,它就会被触发。

要获取Image的索引,我们可以将索引设置为ImageName属性。

例如:

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    StackPanel stackPanel = new StackPanel();
    for (int i = 0; i < 3; i++)
    {
        Windows.Storage.Streams.IRandomAccessStream random = await Windows.Storage.Streams.RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/sun2set.jpg")).OpenReadAsync();
        Image image = new Image();
        BitmapImage bitmapImage = new BitmapImage();
        StackPanel mystackPanel = new StackPanel();
        image.Name = i.ToString();
        bitmapImage.SetSource(random);
        image.Source = bitmapImage;
        mystackPanel.Children.Add(image);
        image.PointerEntered += Image_PointerEntered;
        image.PointerExited += Image_PointerExited;
        stackPanel.Children.Add(mystackPanel);
    }
    this.Results.Children.Add(stackPanel);
}

private void Image_PointerExited(object sender, PointerRoutedEventArgs e)
{
    var image = sender as Image;

    var parent = VisualTreeHelper.GetParent(image) as StackPanel;
    parent.BorderBrush = new SolidColorBrush(Colors.Red);
    parent.BorderThickness = new Thickness(0);
    image.Tapped -= Image_Tapped;
}

private void Image_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    var image = sender as Image;
    Debug.WriteLine("The" + image.Name + "is Selected!");
    var parent = VisualTreeHelper.GetParent(image) as StackPanel;
    parent.BorderBrush = new SolidColorBrush(Colors.Red);
    parent.BorderThickness = new Thickness(5);
    image.Tapped += Image_Tapped;
}

private void Image_Tapped(object sender, TappedRoutedEventArgs e)
{
    var image = sender as Image;
    //download the image
}