gpt4 book ai didi

xamarin - Xamarin.Forms检测自定义ContentView单击外部事件

转载 作者:行者123 更新时间:2023-12-03 11:01:25 29 4
gpt4 key购买 nike

我有一个 CustomCalendar 元素,它是通过扩展 ContentView 并在另一个 ContentPage 中使用此自定义 View 而创建的。我尝试使用非聚焦事件来检测外部点击。但是问题在于它没有触发事件处理程序。您能否建议我以更好的方式对点击之外的元素进行检测。

我在页面上以这种方式使用我的自定义 View ,并使用了Unfocused EventToCommandBehavior

<views:CustomCalendar x:Name="cal">
<views:Calendar.Behaviors>
<prism:EventToCommandBehavior
EventName="Unfocused"
Command="{Binding UnfocusedCalandar}"/>
</views:Calendar.Behaviors>
</views:Calendar>

最佳答案

每当VisualElement失去焦点时,就会引发Unfocused事件,并且它仅适用于能够获得焦点的元素,不幸的是ContentView无法获得焦点,因此focusedUnfocused事件将永远不会在ContentView上触发。

可以获得焦点的元素:条目,编辑器,选择器等..

作为临时的解决方法,您可以将ContentView包装到StackLayout中,在ContentView和parenet布局上都设置点击手势,它自己的点击手势将阻止父 View 的手势。

<StackLayout BackgroundColor="Red" >
<ContentView HeightRequest="100" WidthRequest="100" BackgroundColor="Blue" >
<ContentView.GestureRecognizers>
<TapGestureRecognizer Tapped="ContentViewTap"/>
</ContentView.GestureRecognizers>
</ContentView>


<CollectionView BackgroundColor="Gray" Focused="CollectionView_Focused" >
<CollectionView.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Baboon</x:String>
<x:String>Capuchin Monkey</x:String>
<x:String>Blue Monkey</x:String>
<x:String>Squirrel Monkey</x:String>
<x:String>Golden Lion Tamarin</x:String>
<x:String>Howler Monkey</x:String>
<x:String>Japanese Macaque</x:String>
</x:Array>
</CollectionView.ItemsSource>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Grid.RowSpan="2"
Source="dog.png"
Aspect="AspectFill"
HeightRequest="60"
WidthRequest="60" />
<Label Grid.Column="1"
Text="{Binding }"
FontAttributes="Bold" />
<Label Grid.Row="1"
Grid.Column="1"
Text="{Binding }"
FontAttributes="Italic"
VerticalOptions="End" />

<Grid.GestureRecognizers>
<TapGestureRecognizer Tapped="StackLayoutTap" />
</Grid.GestureRecognizers>
</Grid>


</DataTemplate>
</CollectionView.ItemTemplate>


</CollectionView>

<StackLayout.GestureRecognizers>
<TapGestureRecognizer Tapped="StackLayoutTap" />
</StackLayout.GestureRecognizers>
</StackLayout>

关于xamarin - Xamarin.Forms检测自定义ContentView单击外部事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62210620/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com