我希望捕获TextBox
上的鼠标点击次数:
<Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox x:Name="t" MouseDown="TextBox_MouseDown"
MouseLeftButtonDown="TextBox_MouseLeftButtonDown"
MouseLeftButtonUp="TextBox_MouseLeftButtonUp"
Height="50" />
</Grid>
</Window>
现在,当用户第一次进入TextBox
时,我只收到鼠标点击事件。在此TextBox
具有键盘焦点之后,我不再接收鼠标单击事件。知道如何让这个工作吗?
答案 0 :(得分:45)
TextBox内置了处理功能 冒泡MouseUp和MouseDown 事件。因此,自定义事件 听取MouseUp或者的处理程序 来自TextBox的MouseDown事件将 不被称为。 如果您需要回复 对这些事件,听听 隧道PreviewMouseUp和 相反,也就是PreviewMouseDown事件 注册处理程序 HandledEventsToo参数(后者 选项仅适用于 码)。不要标记处理的事件 除非你故意想要 禁用TextBox本机处理 这些事件,请注意这一点 对控制有显着影响 UI。
在您的代码中,您只是MouseLeftButtonUp
答案 1 :(得分:27)
您可以使用PreviewMouseDown事件,并在控件的内部部分处理点击之前捕获任何方式的点击:
<TextBox x:Name="t" PreviewMouseDown="TextBox_MouseDown" Height="32" Width="274" />
答案 2 :(得分:1)
以下是使用MVVM的代码示例
的活动在ViewModel中:
private ICommand _merchantRefereneceCommand;
public ICommand MerchantReferenceCopyToClipboard
{
get { return _merchantRefereneceCommand ?? (_merchantRefereneceCommand = new MerchantRefereneceCommand(this)); }
set { _merchantRefereneceCommand = value; }
}
public class MerchantRefereneceCommand : ICommand
{
private readonly PaymentViewModel _paymentViewModel;
public MerchantRefereneceCommand(PaymentViewModel paymentViewModel)
{
_paymentViewModel = paymentViewModel;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
//Your code goes here.
}
public event EventHandler CanExecuteChanged;
}
在视图中(xaml):
<TextBox Grid.Row="1" x:Name="MerchantReference" MaxLength="10" IsReadOnly="True"
Text="{Binding MerchantReference, Mode=OneWay}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick" >
<i:InvokeCommandAction Command="{Binding MerchantReferenceCopyToClipboard}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
希望这可以节省你一些时间。