2017-01-31 7 views
0

У меня очень быстрый вопрос. Я использую кнопку toggle для переключения между двумя параметрами (это может быть больше, но для простоты, давайте просто скажем две кнопки), и как только кнопка будет отмечена, я не хочу, чтобы она была снята, если только она не выбрала другую опцию (т.е. один параметр должен быть выбран все время).UWP: как предотвратить ToggleButton непроверено после его проверки

В 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; не имеет никакого эффекта. Вы можете мне помочь?

Спасибо!

+0

Я хотел бы попробовать что-то с установкой * IsHitTestVisible * в зависимости от ваших потребностей (например, привязка к собственности, которая проверяет все кнопки и объединить с проверенным состоянием текущей своим). – Romasz

+3

Почему вы не используете переключатели вместо кнопок переключения? – Blackstar

+1

Как насчет IsEnabled? Я думаю, он должен все решить. –

ответ

2

Когда мы дважды нажали кнопку «Кэш», событие Tap будет запущено один раз. Во второй раз нажмите ToggleButton, он изменит только состояние ToggleButton с отмеченного на непроверенный.

В качестве обходного пути вы должны иметь возможность добавить событие Click к ToggleButton. И в событии Click мы должны установить свойство IsChecked как в событии Tap.

Когда мы нажмем 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; 
} 
+0

OH WOW !!! Это сработало. Вы чемпион! Спасибо, что поделился! – Sam