C# WPF Togglebutton在父控件中处理PreviewMouseDown事件后不切换

C# WPF Togglebutton在父控件中处理PreviewMouseDown事件后不切换,c#,wpf,C#,Wpf,如果处理UserControl的PreviewMouseDown事件,并且UserControl的内部是一个ToggleButton,它将不会触发内置的本机选中事件,也不会触发单击事件(以蓝色突出显示)。如果您不处理预览事件,它可以正常工作 我认为预览事件不会将事件标记为已处理,但即使使用 e.handled = false; 之后将不会有单击或选中事件 如何启用togglebutton的单击和选中事件 了解问题的代码: WpfApplication1.cs namespace WpfAppl

如果处理
UserControl
PreviewMouseDown
事件,并且
UserControl
的内部是一个
ToggleButton
,它将不会触发内置的本机选中事件,也不会触发单击事件(以蓝色突出显示)。如果您不处理预览事件,它可以正常工作

我认为预览事件不会将事件标记为已处理,但即使使用

e.handled = false;
之后将不会有单击或选中事件

如何启用togglebutton的单击和选中事件

了解问题的代码:

WpfApplication1.cs

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void UserControl1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //working
            MessageBox.Show("Preview down");
            e.Handled = false; //this is what I tried
        }

        private void UserControl1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            //working
            MessageBox.Show("preview up");
        }
    }
}
WpfApplication.Xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <local:UserControl1 PreviewMouseLeftButtonDown="UserControl1_PreviewMouseLeftButtonDown" PreviewMouseLeftButtonUp="UserControl1_PreviewMouseLeftButtonUp" ></local:UserControl1>
    </Grid>
</Window>
UserControl1.xaml

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click"></ToggleButton>  
    </Grid>
</UserControl>

当用户控件内的事件被触发时,需要为用户控件引发事件处理程序。这将上升到链条上,并处理来自两者的平衡

单击
ToggleButton
时,它将触发
ToggleButton\u单击
,并触发事件
UserControl1\u先前的mouseleftbuttondown

WPF应用程序1 用户控制1
这里真的没什么好做的…请告诉我你需要我做什么进一步的帮助我们需要帮助。更多的代码准确地显示了您正在做什么,哪里出了问题,以及您迄今为止试图解决的问题。如果我错过了什么,请告诉我。嗨,谢谢你的回复。不幸的是,我无法运行您的代码,但我仍然想知道,为什么预览事件会消耗信号而不传递它。此解决方案是否还提供本机切换行为(蓝色高亮显示)?@Sceen在父事件和子事件的情况下,父事件甚至采用层次结构。退房
<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click"></ToggleButton>  
    </Grid>
</UserControl>
UserControl1.ToggleButtonClick += new EventHandler(UserControl1_PreviewMouseLeftButtonDown);

private void UserControl1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("Preview down");
    // Handle the event
}
public event EventHandler ToggleButtonClick;

private void ToggleButton_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("test");
    // Handle the event
}