2009-12-09 69 views
22

捕捉鼠标点击我要捕捉一个TextBox鼠标点击:在WPF的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

获得重点的能力对你至关重要吗?也许你可以禁用它? – levanovd 2009-12-09 14:56:18

回答

39

TextBox Class

文本框内置了处理的 冒泡的MouseUp和的MouseDown 事件。因此,自定义事件 处理程序侦听MouseUp或 来自TextBox的MouseDown事件将 不称为如果你需要回应 这些事件,监听 隧道PreviewMouseUp和 PreviewMouseDown事件,而不是,或 与 HandledEventsToo参数(后者 选项只能通过 代码)注册的处理程序。不要标记处理的事件 ,除非您故意要 禁用TextBox本机处理 这些事件,并且请注意,此 对UI的控件的 有显着影响。

在你的代码,你是射击只是MouseLeftButtonUp

21

可以使用PreviewMouseDown事件,则控制过程的内部零件前捕捉任何的点击方式点击:

<TextBox x:Name="t" PreviewMouseDown="TextBox_MouseDown" Height="32" Width="274" /> 
0

这里的使用MVVM的人的代码示例

它适用于以下事件:inheriting from Control.

在视图模型:

在视图(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> 

希望这可以节省一些时间。