【发布时间】:2020-10-10 13:22:57
【问题描述】:
这里的想法很简单,我有 2 个或更多按钮,并希望它们像单选按钮一样工作。因此,任何时候都只能检查一个,当一个被检查时,其他人必须取消检查自己。我正在使用 MVVM,所以不想走后面的代码路线,尽管这样做会更容易。
这是我尝试过的 XAML,由于按钮相互引用而被锁定。
<Label Text="Group Header Sorting" TextColor="{DynamicResource InverseTextColor}"/>
<StackLayout Orientation="Horizontal" Spacing="0">
<buttons:SfButton x:Name="GroupHeaderSortAscButton" Text="Ascending" HeightRequest="35" WidthRequest="90" IsChecked="{Binding Source={x:Reference GroupHeaderSortDescButton}, Path=IsChecked, Converter={converters:InverseBoolConverter}}">
</buttons:SfButton>
<buttons:SfButton x:Name="GroupHeaderSortDescButton" Text="Descending" HeightRequest="35" WidthRequest="90" IsChecked="{Binding Source={x:Reference GroupHeaderSortAscButton}, Path=IsChecked, Converter={converters:InverseBoolConverter}}">
</buttons:SfButton>
</StackLayout>
我也尝试过数据触发器并取得了更大的成功,但它仍然不完美,因为它需要在开始工作之前按下两次未选择的按钮。
<StackLayout Orientation="Horizontal" Spacing="0">
<buttons:SfButton x:Name="GroupHeaderSortAscButton" Text="Ascending" HeightRequest="35" WidthRequest="90" IsChecked="False">
<buttons:SfButton.Triggers>
<DataTrigger TargetType="buttons:SfButton" Binding="{Binding Source={x:Reference GroupHeaderSortDescButton}, Path=IsChecked}" Value="True">
<Setter Property="IsChecked" Value="False"/>
</DataTrigger>
<DataTrigger TargetType="buttons:SfButton" Binding="{Binding Source={x:Reference GroupHeaderSortDescButton}, Path=IsChecked}" Value="False">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</buttons:SfButton.Triggers>
</buttons:SfButton>
<buttons:SfButton x:Name="GroupHeaderSortDescButton" Text="Descending" HeightRequest="35" WidthRequest="90" IsChecked="True">
<buttons:SfButton.Triggers>
<DataTrigger TargetType="buttons:SfButton" Binding="{Binding Source={x:Reference GroupHeaderSortAscButton}, Path=IsChecked}" Value="True">
<Setter Property="IsChecked" Value="False"/>
</DataTrigger>
<DataTrigger TargetType="buttons:SfButton" Binding="{Binding Source={x:Reference GroupHeaderSortAscButton}, Path=IsChecked}" Value="False">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</buttons:SfButton.Triggers>
</buttons:SfButton>
</StackLayout>
我知道他们从 XF 4.6 开始引入 RadioButton 控件,我已经尝试过这个及其错误,根据 Git Hub 上的 cmets 它将在 XF 5 中发生重大变化,所以我不想实现这个实验版。
这就是我想要的样子:
【问题讨论】:
-
如果您已经在使用 SF 控件,为什么不使用他们的 RadioButton?
-
是的,我可以做到,但我正在尝试实现与收音机中常见的小圆圈不同的风格。我已经更新了我的帖子以展示设计。
-
那个是分段控件,不是单选按钮——SF也有,开源的选项也很丰富
-
感谢您指出该控件,我会看看,但似乎我可以使用它。我仍然会保留这个问题,因为我想看到答案。
-
为什么不尝试在按钮绑定上下文的设置器部分以编程方式处理它。单击一个按钮时,更改另一个按钮的状态。只需几行代码,您就可以得到您想要的
标签: xaml xamarin.forms syncfusion radio-group