使用标准按钮创建单选按钮组

问题描述

这里的想法很简单,我有2个或更多按钮,并且希望它们像单选按钮一样工作。因此,任何时候都只能检查一个,而当一个被选中时,其他人必须取消选中自己。我正在使用MVVM,因此尽管这样做会更容易,但也不想走在后面的代码之路。

这是我尝试过的XAML,由于按钮之间相互引用,该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},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上的评论,它将在XF 5中进行重大更改,因此我不想实现此功能实验版本。

这就是我追求的样子:

enter image description here

解决方法

我们已经通过使用Syncfusion SfButton达到了您的要求。要将其设置为切换类型,需要将IsCheckable属性设置为True。然后只有它才能正确更新IsChecked属性。为了保持单一选择,我们通过将GroupKey内部包含进来进一步扩展了SfButton。

CustomRadioButton

,

我们已经分析了您的查询,并希望通过Syncfusion SfSegmentedControl帮助您达到要求。请参阅下面的链接以获取更多详细信息。

https://help.syncfusion.com/xamarin/segmented-control/getting-started

您可以从下面的链接中获取Syncfusion SfSegementedControl示例。

http://www.syncfusion.com/downloads/support/directtrac/general/ze/GettingStarted1466563199.zip?_ga=2.191225194.1930744426.1602461581-1097581439.1584618742

如果所提供的建议不符合您的要求,请通过任何简短的演示视频演示或任何图形表示向我们分享有关其选择更改行为的更多详细信息。

关于, Yuvaraj

,

我希望能够使用标准按钮和XAML来做到这一点,并避免使用第三方控制,仅此而已。

我最终使用了Syncfusion的SfSegmentedControl,效果很好,但这是付费的第三方控制。