添加新节点后标记节点名称

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

您可以尝试处理视图中 TextBoxGotKeyboardFocus 事件:

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