在同一个按钮上调用 MouseDown 事件后,MouseUp 事件处理程序不起作用 WPF C#
MouseUp event handler not working after MouseDown event is called on the same button WPF C#
我在 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
}
我在 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
}