C# 如何仅在用户ctrl键单击按钮的下半部分时触发事件?
我想在我的应用程序中实现一些秘密功能,它们只能通过按住ctrl键并左键单击按钮的下半部分来调用。这可以在WPF中实现吗?我试图创建一个演示应用程序,但调试没有在click事件处理程序中显示光标位置信息。下面是我的测试代码。有什么想法吗C# 如何仅在用户ctrl键单击按钮的下半部分时触发事件?,c#,wpf,events,event-handling,C#,Wpf,Events,Event Handling,我想在我的应用程序中实现一些秘密功能,它们只能通过按住ctrl键并左键单击按钮的下半部分来调用。这可以在WPF中实现吗?我试图创建一个演示应用程序,但调试没有在click事件处理程序中显示光标位置信息。下面是我的测试代码。有什么想法吗 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xm
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="255.284" Width="313.918">
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="81,89,0,0" VerticalAlignment="Top" Width="158" Height="49" Click="button_Click"/>
</Grid>
</Window>
使用System.Windows;
命名空间WpfApplication1
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{/您可以使用鼠标.GetPosition
获取光标相对于按钮角的位置,并将该位置与按钮的实际高度进行比较:
var pos = Mouse.GetPosition(button);
if(pos.Y >= button.ActualHeight * 0.5)
{
//do something
}
您可以使用鼠标.GetPosition
获取光标相对于按钮角的位置,并将该位置与按钮的实际高度进行比较:
var pos = Mouse.GetPosition(button);
if(pos.Y >= button.ActualHeight * 0.5)
{
//do something
}
您可以使用MouseUp或MouseDown事件,这两个事件都提供了事件参数中的鼠标位置以及按下的鼠标按钮
当鼠标按钮在按钮内被提起时,会触发鼠标向上;当鼠标按钮在按钮内被按下时,会触发鼠标向下(你能猜到吗?)
编辑:我刚刚检查了MouseDown的详细信息,您必须使用
Point p = e.GetPosition(yourButton);
要获取鼠标相对于按钮的位置(您可以用任何控件替换yourButton
,以获取鼠标相对于按钮的位置)您可以使用MouseUp或MouseDown事件,这两个事件都提供了事件参数中的鼠标位置以及按下的鼠标按钮
当鼠标按钮在按钮内被提起时,会触发鼠标向上;当鼠标按钮在按钮内被按下时,会触发鼠标向下(你能猜到吗?)
编辑:我刚刚检查了MouseDown的详细信息,您必须使用
Point p = e.GetPosition(yourButton);
要获取鼠标相对于按钮的位置(可以用任何控件替换yourButton
,以获取鼠标相对于按钮的位置)在现有按钮的下半部分顶部添加第二个按钮,但将其设置为用户不可见
然后,您可以对其单击处理程序进行编程,使其完全符合您的要求,甚至可以根据需要激活底层可见按钮的单击处理程序。在现有按钮的下半部分顶部添加第二个按钮,但将其设置为用户不可见
然后,您可以对其单击处理程序进行编程,使其完全符合您的要求,甚至可以根据需要激活底层可见按钮的单击处理程序。有很多方法可以做到这一点
除了我认为正确的答案外,您还可以对布局进行调整。例如,您可以定义一个边框,其中包含两个按钮,用户会认为只有一个按钮:
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Width="250" Height="100" >
<Border BorderBrush="Black" BorderThickness="1" MouseEnter="border_MouseEnter" MouseLeave="border_MouseLeave">
<StackPanel>
<Button VerticalAlignment="Top" Height="50" Style="{StaticResource ButtonStyle}" Content="MainButton"></Button>
<Button VerticalAlignment="Bottom" Content="SecretArea" Style="{StaticResource ButtonStyle}" Height="50" Click="Button_Click"></Button>
</StackPanel>
</Border>
</Grid>
有很多方法可以做到这一点
除了我认为正确的答案外,您还可以对布局进行调整。例如,您可以定义一个边框,其中包含两个按钮,用户会认为只有一个按钮:
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Width="250" Height="100" >
<Border BorderBrush="Black" BorderThickness="1" MouseEnter="border_MouseEnter" MouseLeave="border_MouseLeave">
<StackPanel>
<Button VerticalAlignment="Top" Height="50" Style="{StaticResource ButtonStyle}" Content="MainButton"></Button>
<Button VerticalAlignment="Bottom" Content="SecretArea" Style="{StaticResource ButtonStyle}" Height="50" Click="Button_Click"></Button>
</StackPanel>
</Border>
</Grid>
为什么不呢?当点击GUI上的某个区域时,OP需要一个特殊的功能。这听起来像是一个按钮的工作。我可能会工作,但如果你不添加新的(隐藏的)按钮就可以完成的话UI元素,对我来说它是干净的为什么不?当点击GUI上的某个区域时,OP想要一个特殊的功能。这听起来像是一个按钮的工作。我可能会工作,但如果你不添加新的(隐藏的)UI元素就可以做到,对我来说它更干净