2015-07-28 2 views
1

Итак, я хочу найти способ сделать так, чтобы пользователь подтвердил свои действия, нажав кнопку дважды, используя за один клик. В первый раз он отображает предупреждение с помощью скрытой метки и запускает таймер, который будет считаться в течение нескольких секунд. Затем, если пользователь снова нажимает кнопку (до таймаута), он выполняет код. Если оставить ярлык скрытым, и пользователю потребуется снова нажать 2 раза, чтобы запустить код. Будет ли лучший подход включать аргумент if и глобальную переменную. Как я думал, что-то вроде этого (я знаю, что это не в C#, но это хорошее визуальное представление о том, что я говорю):Нажмите кнопку дважды, чтобы подтвердить действие.

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

Или есть какие-либо другие более эффективные методы?

+0

В компьютерах, это называется «двойной щелчок». – Icemanind

+4

Звучит как плохая юзабилити - используйте стандарт и покажите сообщение с сообщением «да-нет», тем самым помогая пользователю подтвердить его действие. –

+1

Лучший способ: сделать то же самое при первом щелчке, но предоставить способ уничтожить вещь в случае, если это не то, чего хочет пользователь. –

ответ

2

Я не уверен, что использование таймера было бы хорошей идеей, но я использую 3-состояние ToggleButton для достижения аналогичного поведения.

В моем решении, когда пользователь нажимает на мою кнопку (я называю это ConfirmCancelButton), он становится красным и ждет второго щелчка, если произойдет второй щелчок, тогда моя команда «cancel» будет выполнена, но если кнопка теряет фокус (например, пользователь щелкает в другом месте). Он вернется в исходное состояние.

Вот простой пример:

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> 
+0

Это именно то, что я искал. Спасибо огромное! – iTechy

+1

Добро пожаловать :) –

Смежные вопросы