这里的想法很简单,我有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>我知道从XF4.6开始他们引入了RadioButton控件,我已经尝试过这个和它的Hub,根据Git Hub上的评论,它将在XF5中有重大变化,所以我不想实现这个实验版本。
这就是我想要的样子:

发布于 2020-10-27 20:48:34
我们已经通过使用Syncfusion SfButton达到了您的要求。若要将其设置为切换类型,需要将IsCheckable属性设置为True。然后,只有它才会正确地更新IsChecked属性。为了保持单一选择,我们扩展了SfButton,包括GroupKey内部,并进行了进一步验证。
https://stackoverflow.com/questions/64293898
复制相似问题