Привязка к ElementName зависит от порядка привязки - PullRequest
0 голосов
/ 09 октября 2018

Я создал простой StateTrigger для привязки к свойству FrameworkElement Width.Существует три свойства зависимостей: MinValue, MaxValue и Element.Это типы double, double и FrameworkElement соответственно.

И я заметил, что в зависимости от порядка привязки это может работать или не работать.

Это прекрасно работает.

<local:ElementWidthTrigger MaxValue="1000"
                           MinValue="800"
                           Element="{Binding ElementName=LayoutRoot}" />

И это не так.

<local:ElementWidthTrigger Element="{Binding ElementName=LayoutRoot}"
                           MaxValue="1000"
                           MinValue="800" />

Заметил, что единственная разница в этих двух примерах - Element порядок привязки свойства.

В ElementWidthTrigger свойство измененообратный вызов для каждого свойства зависимости.И когда Element на самом верху, то обратный вызов никогда не вызывается, несмотря ни на что.

x:Bind решает эту проблему независимо от того, какой порядок используется, но вопрос остается.Кто-нибудь может объяснить, почему свойство Element не может быть привязано в зависимости от порядка привязки?

Работает в Windows 10 1803 build 17134.320.

Рабочий пример проекта можно найти здесь .

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Спасибо, что сообщили об этой проблеме и предоставили солидный репро-проект - это ошибка платформы.Я зарегистрировал это в нашей базе данных и назначил к правильной команде.Еще раз спасибо!

0 голосов
/ 09 октября 2018

Ух ты, это загадка!Хотя я не смог выяснить причину проблемы, на самом деле это похоже на ошибку в UWP.Я заметил, что простой акт добавления x:Name к одному из VisualStates сделает даже ElementName первый ордер работающим, как и ожидалось:

<VisualState x:Name="Test">
    <VisualState.StateTriggers>
        <local:ElementWidthTrigger Element="{Binding ElementName=LayoutRoot}"
                                   MaxValue="1000"
                                   MinValue="800" />
    </VisualState.StateTriggers>

    <VisualState.Setters>
        <Setter Target="Rectangle.Fill" Value="Blue" />
    </VisualState.Setters>
</VisualState>

Было бы здорово, если бы кто-то изкоманда UWP увидела это и выручила, поскольку, вероятно, требуется понимание внутренних органов, чтобы понять, что происходит.

...