TextBox右键MouseUp左键不同的行为

时间:2015-04-30 13:45:01

标签: c# .net wpf xaml

当尝试修改文本并在鼠标事件上选择TextBox的内容时,我注意到左右单击之间的行为不同。

我正在捕获PreviewMouseDown事件,我注意到当按下鼠标右键时,光标移动到TextBox的开头,然后在释放时返回到结尾。

这可以防止选择TextBox文本,但左键单击时不会发生同样的情况。

任何想法为什么这只会发生右键点击?有什么方法可以阻止它吗?

澄清我想要做的是每次用户在文本框中单击时递增/递减文本框的文本。需要进行选择,以便用户可以单击以修改文本或键入所需的显式值,并立即替换文本。

的Xaml:

<Window x:Class="WpfSamples.Selection.InTextBoxWithEvent"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="InTextBox" Height="300" Width="300">
    <Grid>
        <TextBox Text="focus away here" VerticalAlignment="Center" 
                 HorizontalAlignment="Center" Width="100" Margin="0,0,0,77"/>
        <TextBox Text="click here" VerticalAlignment="Center" 
                 HorizontalAlignment="Center" Width="100" ContextMenu="{x:Null}"
                 PreviewMouseDown="UIElement_OnPreviewMouseDown" 
                 PreviewMouseUp="UIElement_OnPreviewMouseUp"/>
    </Grid>
</Window>

代码背后:

public partial class InTextBoxWithEvent
{
    public InTextBoxWithEvent()
    {
        InitializeComponent();
    }

    private void UIElement_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        var textbox = (TextBox)sender;
        textbox.Text = DateTime.Now.Millisecond.ToString();
    }

    private void UIElement_OnPreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        var textbox = (TextBox)sender;
        textbox.CaretIndex = 0;
        textbox.Select(0, textbox.Text.Length);
    }
}

1 个答案:

答案 0 :(得分:0)

为什么会这样? 右键单击控件后面的代码仍然会尝试将焦点放在上下文菜单上,因此您的文本框控件会失去焦点。

有任何预防方法吗? 因此,您需要将焦点捕获回文本框。