单击按钮两次以确认操作

本文关键字:两次 确认 操作 按钮 单击 | 更新日期: 2023-09-27 18:05:25

所以我想找到一种方法,让用户通过使用单次单击单击按钮两次来确认他们的操作。在第一次时,它将通过隐藏标签显示警告,并启动一个计时器,该计时器将计数几秒钟。然后,如果用户再次单击按钮(在超时之前),它将执行代码。如果离开标签将隐藏,用户将不得不再次单击2次来运行代码。最好的方法是使用if参数和全局变量吗?我在想这样的事情(我知道它不是在c#中,但它是我所说内容的一个很好的视觉表示):

Var buttonclick = 0
if buttonclick = 0
{Show warning label
Start timer 
Set Var buttonclick = 1}
If buttonclick = 1
{Do action}

或者有其他更好的方法吗?

单击按钮两次以确认操作

我不确定使用计时器是否是个好主意,但我使用3-state ToggleButton来实现类似的行为。

在我的解决方案中,当用户点击我的按钮(我称之为ConfirmCancelButton),它变成红色,等待第二次点击,如果第二次点击发生,那么我的"取消命令"将执行,但如果按钮失去它的焦点(例如用户点击其他地方),它将回到它的原始状态。

下面是一个简单的例子:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<Window.Resources>
    <Style x:Key="ConfirmCancelButton" TargetType="{x:Type ToggleButton}">
        <Setter Property="IsThreeState" Value="True"/>
        <Style.Triggers>
            <!-- Button is not clicked (original state) -->
            <Trigger Property="IsChecked" Value="False">
                <Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
            </Trigger>
            <!-- Button clicked once (waiting for 2nd click)-->
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="Foreground" Value="Orange"/>
            </Trigger>
            <!-- Button clicked twice (executing cancel command)-->
            <Trigger Property="IsChecked" Value="{x:Null}">
                <Setter Property="Foreground" Value="Red"/>
            </Trigger>
            <!-- Button lost it's focus (back to the original state)-->
            <Trigger Property="IsFocused" Value="False">
                <Setter Property="IsChecked" Value="False"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Window>
    <Grid>
        <ToggleButton Grid.Row="1" Style="{StaticResource ConfirmCancelButton}" Content="Cancel" >
            <i:Interaction.Triggers>
                <!-- if IsChecked=="{x:Null}" -->
                <i:EventTrigger EventName="Indeterminate">
                    <i:InvokeCommandAction Command="{Binding CancelCommand}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ToggleButton>
    </Grid>
</Window>