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



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

  • 当用户按下任何鼠标按钮(MouseDown事件(时,PasswordBox中的密码将可见
  • 当用户离开鼠标按钮按下(MouseUp事件(时,密码将再次隐藏

问题是,只有当我们不在同一个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
}

最新更新