UserControl中的TextBox MouseDown事件

时间:2013-07-09 14:52:29

标签: wpf vb.net events user-controls

我有一个包含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

出于测试目的,我将以编程方式将UserControls添加到我的MainWindow:

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

1 个答案:

答案 0 :(得分:3)

这是一个有点常见的问题。

由于这些控件在内部处理这些事件,因此会出现一些控件。例如,该按钮“吞下”了点击,而是公开了自己的事件 - Click事件。 如果你想在XAML中声明你的文本框事件处理程序,我建议你查看预览*事件(即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" />