c# - 在同一按钮 WPF C# 上调用 MouseDown 事件后,MouseUp 事件处理程序不起作用
问题描述
我在 C# WPF 表单中有一个显示密码按钮,我想要的是:
- 当用户按下任何鼠标按钮(MouseDown 事件)时,密码
PasswordBox
变得可见。 - 当用户离开鼠标按钮按下(MouseUp 事件)时,密码再次被隐藏。
问题是 MouseUp 事件只有在我们不执行鼠标按钮按下 (MouseDown) 时才会被触发Button
。这意味着,如果我们第一次执行MouseDown ,Button
那么之后将不会触发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 事件。您需要e.Handled = true;
在事件处理程序内部添加MouseDown
,以告诉程序该事件已被处理。
函数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
}
推荐阅读
- python - 尝试引用要保存到的 json 文件时出现 Python Json 文件错误
- hadoop - Impala 中的表格压缩
- javascript - 如何在javascript中表达至少一个所需的输入
- c++ - 如何使用带有向量的winapi ReadProcessMemory从另一个进程读取缓冲区?
- laravel - 使用 laravel 存储文件夹未显示(未找到)vue/laravel 图像
- android - Android Studio 是否提供了一种转义字符串的方法?
- c++ - 试图以崇高的方式运行。发生错误:collect2.exe:错误:ld 返回 1 退出状态
- node.js - 护照猫鼬本地的身份验证错误
- reactjs - 如何在 reactJS 中重新加载特定标签
- json - 为什么 Unmarshal 使用嵌套结构会失败?