我在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
}