UWP:如何在检查后取消选中ToggleButton

时间:2017-01-31 12:45:00

标签: c# uwp win-universal-app togglebutton

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

在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;
}

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

谢谢!

1 个答案:

答案 0 :(得分:2)

当我们快速点击两次Cash按钮时,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;
}