2015-10-19 3 views
1

Я добавляю локализацию в свое приложение UWP, добавляя теги x: uid ко всем моим элементам и используя многоязычный инструментарий. Однако я столкнулся с проблемой, когда в одном случае я сам меняю текст в узком представлении с помощью visualstatemanager. Как это сделать в локализованном приложении? Моя первая мысль заключалась в том, чтобы изменить uid элемента на новый совпадение с новым текстом, я не уверен, что это возможно.Выполнение локализации в visualstatemanager путем изменения x: 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 
+0

Я не уверен, что понимаю. Что вы пробовали? – WiredPrairie

+0

@WiredPrairie Я добавил пример – Jason

ответ

2

x:Uid не свойство зависимости от вашего TextBlock и не может быть установлен во время выполнения. Вы можете дважды проверить это, перейдя к сгенерированному коду (файл .g.i.cs) вашей страницы XAML. Чтобы сделать это, нажмите F12 на InitializeComponent() в конструкторе. Теперь найдите свой элемент управления в сгенерированном коде и начните сверлить дерево объекта: вы не столкнетесь с свойством Uid. Это XAML directive, подкрепленный атрибутом.

Как я обычно решаю, у этого есть 2 текстовых блока (один рухнул) с длинным и коротким текстом и переключением видимости между обоими текстовыми блоками в вашем VisualStates. В зависимости от того, что представляет собой родительский контейнер этих текстовых блоков, вам может потребоваться добавить StackPanel или Grid, поскольку некоторые родительские элементы управления могут иметь только один дочерний элемент.