在同一个按钮上调用 MouseDown 事件后,MouseUp 事件处理程序不起作用 WPF C#

MouseUp event handler not working after MouseDown event is called on the same button WPF C#

我在 C# WPF 窗体中有一个 显示密码按钮,我想要的是:

问题是只有当我们不在同一个 Button 上执行鼠标按钮按下 (MouseDown) 时,才会触发 MouseUp 事件。这意味着,如果我们先在 Button 上执行 MouseDown,那么之后 MouseUp 事件将不会被触发。

这里是XAML代码:

<Button Grid.Row="1" Grid.Column="2" Margin="10,10,0,0" Width="25" Height="25">
   <Image x:Name="showPassword_Button" Source="eye.jpg" MouseDown="showPassword_Button_MouseDown" MouseUp="showPassword_Button_MouseUp"></Image>
</Button>

这是事件处理程序的 C# 代码:

private void showPassword_Button_MouseDown(object sender, MouseButtonEventArgs e)
{
    visiblePassword_TextBox.Text = password_TextBox.Password;
    visiblePassword_TextBox.Visibility = Visibility.Visible;
}

private void showPassword_Button_MouseUp(object sender, MouseButtonEventArgs e)
{
    // This function does not get called
    visiblePassword_TextBox.Visibility = Visibility.Hidden;
    password_TextBox.Visibility = Visibility.Visible;
}

您需要在 MouseDown 事件处理函数中添加以下内容:

e.Handled = true;

当您执行鼠标按下操作时,除非您释放鼠标按钮,否则不会处理该事件。所以它将阻止 MouseUp 事件。 您需要在 MouseDown 事件处理程序中添加 e.Handled = true;,以告诉程序该事件已被处理。

函数showPassword_Button_MouseDown()应该写成:

private void showPassword_Button_MouseDown(object sender, MouseButtonEventArgs e)
{
    visiblePassword_TextBox.Text = password_TextBox.Password;
    visiblePassword_TextBox.Visibility = Visibility.Visible;
    e.Handled = true; // Specify that event has been handled
}