UWP:如何防止选中 ToggleButton 后未选中

UWP: how to prevent ToggleButton unchecked once it is checked

我有一个非常快速的问题。我正在使用切换按钮在 2 个选项之间切换(它可以更多但为了简单起见,我们只说两个按钮)并且一旦选中按钮,我不希望它被取消选中,除非它 select 另一个选项(即一个选项必须一直 selected)。

在 WPF 中,我曾经处理 PreviewMouseLeftButtonDown 以防止未选中切换按钮。但是UWP里好像没有。

到目前为止,这是我的代码:

//in XAML
<ToggleButton x:Name="tbtnCash" Grid.Column="0" Content="CASH" IsChecked="True" IsDoubleTapEnabled="False" IsHoldingEnabled="False" IsRightTapEnabled="False" Padding="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Tapped="tbtnCash_Tapped"></ToggleButton>

<ToggleButton x:Name="tbtnCard" Grid.Column="1" Content="CARD" IsDoubleTapEnabled="False" IsHoldingEnabled="False" IsRightTapEnabled="False" Padding="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Tapped="tbtnCard_Tapped"></ToggleButton>


//In code
private void tbtnCash_Tapped(object sender, TappedRoutedEventArgs e)
{
    e.Handled = true;

    tbtnCash.IsChecked = true;
    tbtnCard.IsChecked = false;
}

private void tbtnCard_Tapped(object sender, TappedRoutedEventArgs e)
{
    e.Handled = true;

    tbtnCash.IsChecked = false;
    tbtnCard.IsChecked = true;
}

现在,如果我(快速)点击 Cash 按钮 两到三下,Cash 按钮 将取消选中。 e.Handled = true; 似乎没有效果。你能帮帮我吗?

谢谢!

当我们快速点击现金按钮两次时,Tap 事件将被触发一次。第二次点击 ToggleButton,它只会将 ToggleButton 的状态从选中更改为未选中。

作为解决方法,您应该能够将 Click 事件添加到 ToggleButton。在 Click 事件中,我们应该能够像在 Tap 事件中一样设置 IsChecked 属性。

当我们点击ToggleButton一次时,会触发Click事件,然后触发Tap事件。 如果我们点击 ToggleButton 两次,Click 事件将被触发两次。

例如:

private void tbtnCash_Tapped(object sender, TappedRoutedEventArgs e)
{
    Debug.WriteLine("Tap is fired!");
    e.Handled = true;
    tbtnCash.IsChecked = true;
    tbtnCard.IsChecked = false;
}

private void tbtnCard_Tapped(object sender, TappedRoutedEventArgs e)
{
    e.Handled = true;
    tbtnCash.IsChecked = false;
    tbtnCard.IsChecked = true;
}

private void tbtnCash_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Click is fired!");
    tbtnCash.IsChecked = true;
    tbtnCard.IsChecked = false;
}

private void tbtnCard_Click(object sender, RoutedEventArgs e)
{
    tbtnCash.IsChecked = false;
    tbtnCard.IsChecked = true;
}