2017-08-17 18 views
0

Telerik RadTreeViewには、基礎となるCollectionViewSourceがあります。そのコレクションに新しいアイテムを追加すると、デフォルトの名前「新しいノード」が取得されます。そのノードを編集モードに設定して、ユーザーがそのノードの新しい名前をすぐに入力できるようにします。新しいノードを追加した後のノード名のマーク

設定をIsInEditModeからtrueに変更すると、ノードは編集モードになりますが、名前は表示されません。カーソルは単に先頭にあり、現在の名前はユーザーが最初にマークする必要があります。現在の名前を自動的にマークする可能性はありますか?私の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

あなたはビューでTextBoxためGotKeyboardFocusイベントを処理しようとすることができます:

<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スレッドまたはSystem.Threading.Timerで遅延が1msの場合に機能することがわかりました。私はツリー内で何が起こるのかわかりませんが、明らかに、木がリフレッシュするためには短時間か、おそらくスレッド変更が必要です。私はこれのためのよりクリーンなソリューションがあるのだろうかと思います。 – telandor

+0

公式のtelerikフォーラムでは、同じことを提案しています。http://www.telerik.com/forums/edit-node-name-after-adding-new-node#ZC0S2WAvXUyJ4XNR63zCuA – telandor

関連する問題