如何在不触发 Button 单击事件的情况下单击 Button 内容中的 ToggleSwitch 控件
How to Click a ToggleSwitch control inside a Button content without firing the Button click event
我正在处理 WPF 项目并且遇到以下情况:
- 我正在使用 MahApps.Metro 来设计我的应用程序。
- 我有一个导航到某个页面的按钮。
- 该按钮的内容中有一个 ToggleSwitch 控件。
每当我单击 ToggleSwitch 以更改其状态时,都会触发 Button 单击事件。
我需要一种方法来防止这种情况。
<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>
您可以 handle/prevent 在按钮的单击事件中执行此操作。
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!");
}
}
我正在处理 WPF 项目并且遇到以下情况:
- 我正在使用 MahApps.Metro 来设计我的应用程序。
- 我有一个导航到某个页面的按钮。
- 该按钮的内容中有一个 ToggleSwitch 控件。
每当我单击 ToggleSwitch 以更改其状态时,都会触发 Button 单击事件。
我需要一种方法来防止这种情况。
<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>
您可以 handle/prevent 在按钮的单击事件中执行此操作。
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!");
}
}