添加新节点后标记节点名称
Mark node name after adding new node
我有一个带有底层 CollectionViewSource
的 Telerik RadTreeView
。当我向该集合添加新项目时,它会获得一个默认名称 "New Node"。我想将该节点设置为编辑模式,以便用户可以立即为该节点输入新名称。
将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#代码简单地将NodeViewModel
的属性“IsInEditMode
”设置为true
。
您可以尝试处理视图中 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);
}
我有一个带有底层 CollectionViewSource
的 Telerik RadTreeView
。当我向该集合添加新项目时,它会获得一个默认名称 "New Node"。我想将该节点设置为编辑模式,以便用户可以立即为该节点输入新名称。
将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#代码简单地将NodeViewModel
的属性“IsInEditMode
”设置为true
。
您可以尝试处理视图中 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);
}