2015-04-30 45 views
0

當試圖修改文本並選擇鼠標事件上的TextBox內容時,我注意到左右單擊之間的行爲不同。TextBox右按鈕MouseUp向左按鈕的不同行爲

我捕獲了PreviewMouseDown事件,我注意到當按下鼠標右鍵時,光標移動到文本框的開頭,然後在釋放時返回到最後。

這可以防止選中文本框文本,但左擊時不會發生同樣的情況。

任何想法爲什麼這隻發生在右鍵點擊?任何防止它的方法?

爲了闡明我想要做的是每次用戶在文本框中單擊時遞增/遞減文本框的文本。需要進行選擇,以便用戶可以單擊以修改文本或鍵入他們想要的顯式值,並立即替換文本。

的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); 
    } 
} 

回答

0

爲什麼出現這種情況? 右鍵單擊控件背後的代碼仍然嘗試將焦點放到上下文菜單,因此您的文本框控件失去焦點。

任何防止它的方法? 因此,您需要將焦點捕獲迴文本框。

+0

當我這樣做,焦點永遠不會離開文本框 – Slugart

+0

這怎麼可能。點擊應用程序中的其他按鈕或文本框,焦點確實消失。如果你想手動放鬆焦點,那麼在代碼中也要這樣做。原來的問題沒有提到重點。 – Versatile

+0

你有沒有試過這個代碼?我剛剛添加了該行,並且點擊底部文本框後,我無法點擊上面的文本框。 – Slugart