2013-07-09 71 views
0

我有一個包含TextBox的用戶控件,但是我想捕獲mousedown事件,但似乎無法讓事情奏效!我現有的非工作代碼如下,任何援助將不勝感激。TextBox MouseDown UserControl內的事件

用戶控件XAML:

<UserControl x:Class="LeftLabel" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Width="auto" Height="auto" > 
    <StackPanel DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding Path=TextBlockText}" 
         Name="UcTextBlock" 
         Width="{Binding Path=TextBlockWidth}" 
         FontSize="{Binding Path=TextBlockFontSize}" 
         HorizontalAlignment="Right" 
         TextAlignment="Right" 
         VerticalAlignment="Center" 
         Margin="5,0,0,0" /> 
      <TextBox Text="{Binding Path=TextBoxText}" 
        Name="UcTextBox" 
        MouseDown="UcTextBox_MouseDown" 
        Width="{Binding Path=TextBoxWidth}" 
        Height="{Binding Path=TextBoxHeight}" 
        FontSize="{Binding Path=TextBoxFontSize}" 
        Padding="{Binding Path=TextBoxPadding}" 
        Margin="5,0,0,0" 
        BorderThickness="0" /> 
     </StackPanel> 
    </StackPanel> 
</UserControl> 

UserControl.vb:

Public Event TextBoxMouseDown As EventHandler 
Private Sub UcTextBox_MouseDown(sender As Object, e As MouseButtonEventArgs) Handles UcTextBox.MouseDown 
    RaiseEvent TextBoxMouseDown(sender, e) 
End Sub 

出於測試目的,我加入用戶控件到我的主窗口編程:

Dim count As Integer = 1 
While count < 10 
    Dim ucl As New LeftLabel 
    With ucl 
     .Margin = New Thickness(4) 
     .TextBlockText = "Label " & count.ToString 
     .TextBlockWidth = 100 
     .TextBlockFontSize = 12 
     .TextBoxFontSize = 12 
     .TextBoxHeight = 20 
     .TextBoxText = "Initial Text " & count.ToString 
     .TextBoxPadding = New Thickness(2) 
     .TextBoxWidth = 150 
     AddHandler .TextBoxMouseDown, AddressOf LabelLeftTextBoxMouseDown 
    End With 
    TextBoxStackPanel.Children.Add(ucl) 
    count += 1 
End While 

Private Sub LabelLeftTextBoxMouseDown(sender As Object, e As EventArgs) 
    Dim txt As TextBox = DirectCast(sender, TextBox) 
    MsgBox(txt.Text) 
End Sub 

回答

3

這是一個比較常見的問題。

由於這些控件在內部處理這些事件,因此會出現一些控件。例如,按鈕「吞下」點擊,而是暴露自己的事件 - 點擊事件。 如果您想在XAML中聲明您的文本框事件處理程序,我建議您簽出預覽* -events(即PreviewMouseDown),這些總是會發生,如果您需要對點擊作出反應,這可能會解決您的問題。

<TextBox Text="{Binding Path=TextBoxText}" 
        Name="UcTextBox" 
        PreviewMouseDown="UcTextBox_PreviewMouseDown" 
        Width="{Binding Path=TextBoxWidth}" 
        Height="{Binding Path=TextBoxHeight}" 
        FontSize="{Binding Path=TextBoxFontSize}" 
        Padding="{Binding Path=TextBoxPadding}" 
        Margin="5,0,0,0" 
        BorderThickness="0" /> 
+0

感謝提示@sine,這解決了我的問題。我在MSDN上找到了以下文章,它解釋了您的建議。 http://msdn.microsoft.com/en-us/library/ms750580(v=vs.85).aspx – user10001110101