通过更改 x:uid 在 vi​​sualstatemanager 中进行本地化?

Doing localization in visualstatemanager by changing x:uid?

我正在通过向我的所有元素添加 x:uid 标签并使用多语言工具包向我的 UWP 应用程序添加本地化。但是我 运行 遇到了一个问题,在一种情况下,我使用 visualstatemanager 在窄视图中更改了文本本身。我如何在本地化应用程序中执行此操作?我的第一个想法是将元素的 uid 更改为与新文本匹配的新元素,我不确定是否可行。

这是我想做但不起作用的示例:

 <textblock x:Name="DescriptionTextBox" x:uid="DescriptionTextBox"/> // Normal long description

 ....

              <VisualState x:Name="NarrowState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="DescriptionTextBox.Uid" Value="DescriptionTextBoxShort" /> // Uid of short description

x:Uid 不依赖于 属性 您的 TextBlock 并且无法在运行时设置。您可以通过转到 XAML 页面的生成代码(.g.i.cs 文件)来仔细检查这一点。为此,在构造函数中的 InitializeComponent() 上按 F12。现在在生成的代码中找到您的控件并开始向下钻取对象树:您不会遇到 Uid 属性。它是由属性支持的 XAML directive

我通常如何解决这个问题是让 2 个 TextBlocks(一个折叠)带有长文本和短文本,并在 VisualStates 中切换两个 TextBlocks 之间的可见性。根据这些 TextBlock 的父容器是什么,您可能需要添加 StackPanel 或 Grid,因为某些父控件只能有 1 个子元素。