2009-10-23 75 views
3

我已經使用了下面的模板在我的項目:WPF TextBox.SelectAll()不工作

<DataTemplate 
    x:Key="textBoxDataTemplate"> 
    <TextBox 
     Name="textBox" 
     ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" 
     Tag="{Binding}" 
     PreviewKeyDown="cellValueTextBoxKeyDown"> 
     <TextBox.Text> 
      <MultiBinding 
       Converter="{StaticResource intToStringMultiConverter}"> 
       <Binding 
        Path="CellValue" 
        Mode="TwoWay"> 
         <Binding.ValidationRules> 
          <y:MatrixCellValueRule 
           MaxValue="200" /> 
         </Binding.ValidationRules> 
       </Binding> 
       <Binding 
        RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type y:MatrixGrid}}" 
        Path="Tag" 
        Mode="OneWay" /> 
      </MultiBinding> 
     </TextBox.Text> 
    </TextBox> 
</DataTemplate> 

我用這個模板來創建用戶可編輯矩陣。用戶可以在矩陣內從單元格到單元格進行導航,並且我想突出顯示所選文本框中的數據,但它不起作用。我調用TextBox.Focus()和TextBox.SelectAll()來實現效果,但沒有任何效果。 Focus()工作,但文本永遠不會突出顯示。

任何幫助,歡迎和讚賞。

回答

12

好吧,如果有人有興趣,解決我的這個問題是要包括在事件處理方法,其中textBox.SelectAll()textBox.Focus()被稱爲聲明e.Handled = true;

問題是,我附上一個事件處理文本框的PreviewKeyDown事件,處理一個隧道事件,可能是SelectAll()Focus()調用,而不調用e.Handled = true;聲明忽略。

希望它能幫助別人。

+0

你先生,救了我一天 – Florian 2017-03-03 17:04:36

0

沒有剩下的代碼很難說這是否適用於您,但我使用DataTemplate(減去引用未發佈的代碼的部分)組合了一個小樣本。

我能夠通過添加GotFocus事件處理程序中的DataTemplate文本框來選擇在文本框中的所有文本:

<TextBox 
    ... 
    GotFocus="textBox_GotFocus" 
    ...> 
... 
</TextBox> 

和代碼隱藏:

private void textBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     TextBox textBox = sender as TextBox; 
     if (textBox != null) 
     { 
      textBox.SelectAll(); 
     } 
    } 

設我知道你是否試圖在不同情況下選擇全部(不是當盒子獲得焦點時)。

+1

不幸的是,你的解決方案也不管用。調用textBox.SelectAll()時什麼都不會發生。 – Zoliqa 2009-12-17 13:48:18