有没有办法在 UWP 中进行内联文本编辑(如 Windows Explorer 中的文件重命名)?

Is there a way to get inline text editing in UWP (like file rename in Windows Explorer)?

我们的应用向用户公开对象集合,显示在 ListView 中。每个对象都有一组与之关联的描述性字符串。目前,我们使用的 DataTemplate 具有许多排列在垂直 StackPanel 中的 TextBlock 控件,每个描述性字符串一个 TextBlock。顶部字符串是对象的名称。我们希望为用户提供内联编辑名称的能力。我们的行为模型是 Windows Explorer 或 Visual Studio,您可以在其中重命名文件列表控件中的文件。

是否有使用 UWP/WinUI 完成此操作的推荐方法?

当然可以,您可以将TextBoxTextBlock整合在一起,绑定相同的属性,当您双击TextBlock时,您可以使用xaml behavior来显示 TextBox 并隐藏 TextBlock。文本更新时返回到之前的状态。

<Grid >
    <TextBox
        x:Name="Editor"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Center"
        Text="{x:Bind TextInfo, Mode=TwoWay}"
        Visibility="Collapsed">
        <Interactivity:Interaction.Behaviors>
            <Interactions:EventTriggerBehavior EventName="LostFocus">
                <Interactions:ChangePropertyAction
                    PropertyName="Visibility"
                    TargetObject="{Binding ElementName=Editor}"
                    Value="Collapsed" />
                <Interactions:ChangePropertyAction
                    PropertyName="Visibility"
                    TargetObject="{Binding ElementName=DisplayLabel}"
                    Value="Visible" />
            </Interactions:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
    </TextBox>
    <TextBlock
        x:Name="DisplayLabel"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Center"
        Text="{x:Bind TextInfo, Mode=OneWay}">
        <Interactivity:Interaction.Behaviors>
            <Interactions:EventTriggerBehavior EventName="DoubleTapped">
                <Interactions:ChangePropertyAction
                    PropertyName="Visibility"
                    TargetObject="{Binding ElementName=DisplayLabel}"
                    Value="Collapsed" />
                <Interactions:ChangePropertyAction
                    PropertyName="Visibility"
                    TargetObject="{Binding ElementName=Editor}"
                    Value="Visible" />
            </Interactions:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
    </TextBlock>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="EditStyleGroup">
            <VisualState x:Name="Normal" />
            <VisualState x:Name="EditState">
                <VisualState.Setters>
                    <Setter Target="Editor.Visibility" Value="Visible" />
                    <Setter Target="DisplayLabel.Visibility" Value="Collapsed" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>