2016-10-31 7 views
1

Я работаю над проектом WPF и у меня есть следующий сценарий:Как Щелкните элемент управления ToggleSwitch внутри содержимого кнопки без стрельбы события нажатия кнопки

  • Я использую MahApps.Metro стилизовать мое заявление.
  • У меня есть кнопка, которая перемещается на какую-то страницу.
  • Кнопка содержит элемент управления ToggleSwitch внутри его содержимого.

Всякий раз, когда я нажимаю ToggleSwitch, чтобы изменить его состояние, срабатывает событие нажатия кнопки.

Мне нужен способ предотвратить это.

enter image description here

<Button x:Name="btn1" Height="40" BorderThickness="0" Width="auto" HorizontalAlignment="Stretch" Margin="0,0,0,0" Style="{DynamicResource SquareButtonStyle}" Click="Button_Click"> 
     <Grid Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="50" /> 
         <ColumnDefinition Width="100" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
      </Grid.ColumnDefinitions> 

      <TextBlock VerticalAlignment="Center" Width="auto" Grid.Column="1">Services</TextBlock> 
      <Controls:ToggleSwitch Grid.Column="3" x:Name="enabledSwitch4" 
            VerticalAlignment="Center" 
            Width="Auto" 
            Style="{StaticResource MahApps.Metro.Styles.ToggleSwitch.Win10}" 
            OnLabel="" OffLabel="" 
            IsChecked="True" HorizontalAlignment="Center" /> 
     </Grid> 
</Button> 
+0

Зачем вам нужен этот ToggleSwitsch внутри содержимого Button? – punker76

+0

Дизайн проекта, над которым я работаю, требует этого. В основном, есть боковая панель навигации, и у пользователя есть возможность включить/выключить некоторые службы с любой страницы, на которой он сейчас находится. – Abdo

+0

Итак, вы хотите включить/отключить действие нажатия кнопки с помощью кнопки переключения? Или что вы делаете при нажатии кнопки кнопки и тумблера? – punker76

ответ

3

Вы можете обрабатывать/предотвратить это в случае щелчка кнопки.

private async void ButtonClick(object sender, RoutedEventArgs e) 
{ 
    if (e.OriginalSource != sender) 
    { 
     // do nothing if clicked the ToggleSwitch 
     e.Handled = true; 
    } 
    else 
    { 
     // handle the button click action 
     await this.ShowMessageAsync(string.Empty, "Yeah, you clicked the real button!"); 
    } 
} 

enter image description here