2017-08-17 78 views
0

我有一個Telerik RadTreeView,其底層爲CollectionViewSource。當我向該集合中添加新項目時,它將獲得默認名稱「新節點」。我想將該節點設置爲編輯模式,以便用戶可以立即爲該節點輸入新名稱。添加新節點後標記節點名稱

設置IsInEditModetrue將節點置於編輯模式,但不標記名稱。光標只是在開始處,當前名稱必須由用戶首先標記。是否有可能自動標記當前名稱?從我的XAML代碼

摘錄:

<Style TargetType="{x:Type telerik:RadTreeViewItem}" > 
    <Setter Property="IsInEditMode" Value="{Binding Path=IsInEditMode}"/> 
</Style> 

<telerik:RadTreeView.ItemEditTemplate> 
    <DataTemplate> 
     <TextBox Text="{Binding NodeName, Mode=TwoWay}" /> 
    </DataTemplate> 
</telerik:RadTreeView.ItemEditTemplate> 

<HierarchicalDataTemplate DataType="{NodeViewModel}" ItemsSource="{Binding NodeChildren}"> 
    <TextBlock Text="{Binding NodeName}" /> 
</HierarchicalDataTemplate > 

的C#代碼只是設置NodeViewModeltrue的財產 「IsInEditMode」。

回答

1

你可以嘗試處理GotKeyboardFocus事件在視圖中TextBox

<telerik:RadTreeView.ItemEditTemplate> 
    <DataTemplate> 
     <TextBox Text="{Binding NodeName, Mode=TwoWay}" GotKeyboardFocus="TextBox_GotKeyboardFocus" /> 
    </DataTemplate> 
</telerik:RadTreeView.ItemEditTemplate> 

private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    textBox.Dispatcher.BeginInvoke(new Action(() => textBox.SelectAll()), System.Windows.Threading.DispatcherPriority.Background); 
} 
+0

謝謝您的答覆 - 這工作。我發現只要將IsInEditMode屬性設置爲true,即使在Dispatcher線程中完成,或者延遲1ms的System.Threading.Timer,也可以實現。我不知道樹中會發生什麼,但顯然它需要很短的時間,或者可能更換樹來刷新。我想知道是否有一個更清潔的解決方案。 – telandor

+0

官方telerik論壇提出相同的建議:http://www.telerik.com/forums/edit-node-name-after-adding-new-node#ZC0S2WAvXUyJ4XNR63zCuA – telandor