奇怪的 ImageButton 在 ListView 上的行为
Weird ImageButton's behavior on ListView
ListView 上的 ImageButtons 让我很头疼。 Take a look at the gif here.
如您所见,当 ListView 上下滚动时,隐藏的 ImageButtons(每个 ListView 行右侧的 3 个垂直点)变得非常小。
这是对应的XAML:
<ImageButton
Source="more_options"
HorizontalOptions="End"
WidthRequest="21"
BackgroundColor="Transparent"
Clicked="OnMoreOptionsTapped"
CommandParameter="{Binding .}"
Grid.Column="2"
Grid.Row="0"/>
Full XAML is here. ImageButton 在第 56 行。
我做错了什么?我该如何解决这个问题?
另外,我知道我可以只使用带有 TapGestureRecognizer 的图像,但这对我来说是个大问题,因为我需要访问图像元素以获取它的坐标并在正确的位置生成菜单。使用 ImageButton 做到这一点是小菜一碟,但使用 TapGestureRecognizer 就没那么容易了。我做了这样的事情:
XAML
<Image
Source="more_options"
Aspect="AspectFit"
HorizontalOptions="End"
WidthRequest="21"
BackgroundColor="Transparent"
Grid.Column="2"
Grid.Row="0">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnMoreOptionsTapped"
CommandParameter="{Binding .}"/>
</Image.GestureRecognizers>
</Image>
Code-behind:
private void OnMoreOptionsTapped(object sender, TappedEventArgs args)
{
var tapGesture = sender as TapGestureRecognizer;
var button = tapGesture.Parent as Image;
...
}
基本上,对于 ImageButton 元素,object sender
是一个 ImageButton 元素,但是对于图像,object sender
是一个 TapGestureRecognizer,我找不到获取图像的方法 parent 而我只有 TapGestureRecognizer child。此外,tapGesture.Parent
为空,tapGesture.Parent.Parent
也为空。我都试过了。
所以:
- ListView 上的 ImageButton 出现问题。有人有解决办法吗?
- 任何人都可以告诉我如何获得只有 child TapGestureRecognizer 的图像 parent?
我相信回答这两个问题中的任何一个都会解决我的问题呵呵。
另外,这是我第一次在这里提问,如有不当之处还请见谅。
谢谢大家:)
您的问题背后的原因是 xamarin 列表视图中当前存在的错误,可在此处找到:
https://github.com/xamarin/Xamarin.Forms/issues/5200
解决方案是暂时降级到 v3.4,直到我们从 XF 方面得到一个亲密关系
如果您有疑问,祝您好运
ListView 上的 ImageButtons 让我很头疼。 Take a look at the gif here.
如您所见,当 ListView 上下滚动时,隐藏的 ImageButtons(每个 ListView 行右侧的 3 个垂直点)变得非常小。
这是对应的XAML:
<ImageButton
Source="more_options"
HorizontalOptions="End"
WidthRequest="21"
BackgroundColor="Transparent"
Clicked="OnMoreOptionsTapped"
CommandParameter="{Binding .}"
Grid.Column="2"
Grid.Row="0"/>
Full XAML is here. ImageButton 在第 56 行。
我做错了什么?我该如何解决这个问题?
另外,我知道我可以只使用带有 TapGestureRecognizer 的图像,但这对我来说是个大问题,因为我需要访问图像元素以获取它的坐标并在正确的位置生成菜单。使用 ImageButton 做到这一点是小菜一碟,但使用 TapGestureRecognizer 就没那么容易了。我做了这样的事情:
XAML
<Image
Source="more_options"
Aspect="AspectFit"
HorizontalOptions="End"
WidthRequest="21"
BackgroundColor="Transparent"
Grid.Column="2"
Grid.Row="0">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnMoreOptionsTapped"
CommandParameter="{Binding .}"/>
</Image.GestureRecognizers>
</Image>
Code-behind:
private void OnMoreOptionsTapped(object sender, TappedEventArgs args)
{
var tapGesture = sender as TapGestureRecognizer;
var button = tapGesture.Parent as Image;
...
}
基本上,对于 ImageButton 元素,object sender
是一个 ImageButton 元素,但是对于图像,object sender
是一个 TapGestureRecognizer,我找不到获取图像的方法 parent 而我只有 TapGestureRecognizer child。此外,tapGesture.Parent
为空,tapGesture.Parent.Parent
也为空。我都试过了。
所以:
- ListView 上的 ImageButton 出现问题。有人有解决办法吗?
- 任何人都可以告诉我如何获得只有 child TapGestureRecognizer 的图像 parent?
我相信回答这两个问题中的任何一个都会解决我的问题呵呵。
另外,这是我第一次在这里提问,如有不当之处还请见谅。
谢谢大家:)
您的问题背后的原因是 xamarin 列表视图中当前存在的错误,可在此处找到:
https://github.com/xamarin/Xamarin.Forms/issues/5200
解决方案是暂时降级到 v3.4,直到我们从 XF 方面得到一个亲密关系
如果您有疑问,祝您好运