从 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
的索引,我们可以将索引设置为Image
的Name
属性。
例如:
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
}
我正在使用 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
的索引,我们可以将索引设置为Image
的Name
属性。
例如:
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
}