Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Класс PropertyPath и строковый синтаксис можно использовать для создания экземпляра значения PropertyPath в XAML или коде. Значения PropertyPath используются в привязке данных. Аналогичный синтаксис используется для нацеливания на анимации с раскадровкой. В обоих сценариях путь к свойству описывает прохождение через одну или несколько взаимосвязей между свойствами объекта, которые в конечном итоге разрешаются в одно свойство.
Строку пути свойства можно задать непосредственно атрибуту в XAML. С помощью одного и того же синтаксиса строки можно создать PropertyPath , который задает привязку в коде или задать целевой объект анимации в коде с помощью SetTargetProperty. В среде выполнения Windows есть две отдельные области функций, которые используют путь к свойству: привязку данных и целевую анимацию. В реализации среды выполнения Windows таргетирование анимации не создает базовые значения синтаксиса пути к свойству, а сохраняет информацию в виде строки, но понятия обхода объекта-свойства очень похожи. Привязка данных и анимация оценивают путь свойства немного по-разному, поэтому мы описываем синтаксис пути свойства отдельно для каждого.
Путь к свойству для объектов в привязке данных
В Windows Runtime можно привязать к целевому значению любого свойства зависимости. Значение исходного свойства для привязки данных не должно быть свойством зависимостей; это может быть свойство бизнес-объекта (например, класс, написанный на языке Microsoft .NET или C++). Или исходный объект для значения привязки может быть существующим объектом зависимостей, уже определенным приложением. На источник можно ссылаться либо по простому имени свойства, либо путем обхода связей объектов в графе объектов бизнес-объекта.
Можно привязать к значению отдельного свойства или привязать к целевому свойству, в котором содержатся списки или коллекции. Если источник является коллекцией или если путь указывает свойство коллекции, подсистема привязки данных соответствует элементам коллекции источника целевому объекту привязки, что приводит к такому поведению, как заполнение ListBox списком элементов из коллекции источников данных без необходимости предвидеть определенные элементы в этой коллекции.
Обход графа объектов
Элемент синтаксиса, обозначающий обход связи свойства объекта в графе объектов, является символом точки (.). Каждая точка в строке пути свойства указывает разделение между объектом (слева от точки) и свойством этого объекта (справа от точки). Строка вычисляется слева направо, что позволяет поэтапно проходить через несколько взаимосвязей свойств объекта. Рассмотрим пример:
"{Binding Path=Customer.Address.StreetAddress1}"
Вот как оценивается этот путь:
- Объект контекста данных (или источник , указанный в той же привязке), выполняется поиск свойства с именем Customer.
- Осуществляется поиск свойства с именем "Address" в объекте, являющемся значением свойства "Customer".
- Ищется свойство с именем "StreetAddress1" в объекте, который является значением свойства "Address".
На каждом из этих шагов значение рассматривается как объект. Тип результата проверяется только в том случае, если привязка применяется к конкретному свойству. Этот пример бы провалился, если бы "Адрес" был просто строковым значением, не раскрывающим, какая часть строки была уличным адресом. Как правило, привязка указывает на определенные вложенные значения свойств бизнес-объекта, имеющего известную и преднамеренную структуру информации.
Правила для пути свойств в привязке данных
- Все свойства, на которые ссылается путь свойства, должны быть общедоступными в исходном бизнес-объекте.
- Конечное свойство (свойство, которое является последним именованным свойством в пути), должно быть общедоступным и должно быть изменяемым — нельзя привязать к статическим значениям.
- Конечное свойство должно быть прочитано и записано, если этот путь используется в качестве сведений о пути для двусторонней привязки.
Индексаторы
Путь к свойству для привязки данных может включать ссылки на индексированные свойства. Это позволяет привязать к упорядоченным спискам или векторам или словарям или картам. Используйте квадратные скобки "[]" символы для указания индексированного свойства. Содержимое этих квадратных скобок может быть либо целым числом (для упорядоченного списка), либо строкой, не заключенной в кавычки (для словарей). Вы также можете привязать к словарю, где ключ является целым числом. Можно использовать разные индексированные свойства в одном пути, разделяя объект и свойства точкой.
Например, рассмотрим бизнес-объект, в котором есть список "Команды" (упорядоченный список), каждая из которых имеет словарь "Игроки", где каждый игрок определяется по фамилии. Пример пути свойства к конкретному игроку во второй команде: "Teams[1]. Players[Smith]". (Вы используете 1, чтобы указать второй элемент в Teams, так как нумерация начинается с нуля.)
Замечание
Поддержка индексирования источников данных C++ ограничена; См. подробные сведения о привязке данных.
Присоединенные свойства
Пути к свойствам могут содержать ссылки на присоединенные свойства. Так как имя присоединенного свойства уже содержит точку, необходимо заключить любое присоединенное имя свойства в скобки, чтобы точка не рассматривалась как шаг свойства объекта. Например, строка, указывающая, что вы хотите использовать Canvas.ZIndex в качестве пути привязки: "(Canvas.ZIndex)". Дополнительные сведения о присоединенных свойствах см. в обзоре присоединенных свойств.
Объединение синтаксиса путей к свойствам
В одной строке можно объединить различные элементы синтаксиса пути к свойству. Например, можно определить путь к свойству, ссылающийся на индексированное присоединенное свойство, если у источника данных было такое свойство.
Отладка пути свойства привязки
Поскольку путь свойства интерпретируется движком привязки и опирается на информацию, которая может присутствовать только во время выполнения, вам часто необходимо отлаживать путь привязки свойства, не имея возможности полагаться на обычную поддержку времени компиляции или времени разработки в средствах разработки. Во многих случаях результат времени выполнения, когда не удается разрешить путь к свойству, является пустым значением без ошибки, потому что это резервное поведение разрешения привязки предусмотрено по дизайну. К счастью, Microsoft Visual Studio предоставляет режим вывода отладки, который может изолировать часть пути свойства, неудачно указывающую источник привязки, для разрешения. Дополнительные сведения об использовании этой функции средства разработки см. в разделе "Отладка" привязки данных подробно.
Путь к свойству для целевого объекта анимации
Анимации опираются на свойство зависимости, к которому применяются значения, используемые раскадровкой, при выполнении анимации. Чтобы определить объект, в котором находится анимируемое свойство, анимация нацелена на элемент по имени (атрибут x:Name). Часто необходимо определить путь к свойству, который начинается с объекта, определяемого как Storyboard.TargetName, и заканчивается определенным значением свойства зависимостей, где должна применяться анимация. Этот путь свойства используется в качестве значения для Storyboard.TargetProperty.
Дополнительные сведения о том, как определить анимацию в XAML, см. в разделе " Раскадровки анимаций".
Простой таргетинг
Если вы анимируете свойство, существующее в самом целевом объекте, и тип этого свойства может применяться непосредственно к нему (а не к под свойству значения свойства), то можно просто назвать свойство, анимированное без дополнительной квалификации. Например, если вы нацелены на подкласс фигуры , например прямоугольник, и вы применяете анимированный цвет к свойству Fill , путь к свойству может быть "Fill".
Непрямое указание свойств
Можно анимировать свойство, которое является вложенным свойством целевого объекта. Другими словами, если свойство целевого объекта является объектом само по себе, и у этого объекта есть свои свойства, необходимо определить путь к этим свойствам, объясняющий, как пройти через отношения между объектом и его свойствами. При указании объекта, где нужно анимировать подсвойство, заключите имя свойства в скобки и укажите свойство в формате typename.propertyname. Например, чтобы указать, что требуется значение объекта свойства RenderTransform целевого объекта, укажите "(UIElement.RenderTransform)" в качестве первого шага в пути к свойству. Это еще не полный путь, так как анимации не могут применяться непосредственно к значению преобразования . Таким образом, в этом примере теперь вы завершите путь к свойству так, чтобы конечное свойство было свойством подкласса Transform, которое может быть анимировано значением типа Double: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
Указание определенного дочернего элемента в коллекции
Чтобы указать дочерний элемент в свойстве коллекции, можно использовать числовый индексатор. Используйте квадратные скобки "[]" символы вокруг целочисленного значения индекса. Вы можете ссылаться только на упорядоченные списки, а не словари. Поскольку коллекция не является значением, которое может быть анимировано, использование индексатора никогда не может быть конечным свойством в пути к свойству.
Например, чтобы указать, что вы хотите анимировать цвет первой границы в LinearGradientBrush, применяемом к свойству Фона элемента управления, это путь к свойству "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Обратите внимание, что индексатор не является последним шагом пути, и что последний шаг особенно должен ссылаться на свойство GradientStop.Color элемента 0 в коллекции, чтобы применить к нему анимированное значение Color .
Анимация присоединенного свойства
Это не распространенный сценарий, но можно анимировать присоединенное свойство, если это присоединенное свойство имеет значение свойства, соответствующее типу анимации. Так как имя присоединенного свойства уже содержит точку, необходимо заключить любое присоединенное имя свойства в скобки, чтобы точка не рассматривалась как шаг свойства объекта. Например, строка, указывающая, что необходимо анимировать присоединенное свойство Grid.Row к объекту, используйте путь свойства "(Grid.Row)".
Замечание
В этом примере значение Grid.Row является типом свойства Int32 . поэтому вы не можете анимировать его с анимацией Double. Вместо этого вы определяете ObjectAnimationUsingKeyFrames с компонентами DiscreteObjectKeyFrame, где ObjectKeyFrame.Value устанавливается в целое число, например "0" или "1".
Правила для свойств в целевом пути свойств анимации
- Предполагаемая начальная точка пути свойства — это объект, определяемый Storyboard.TargetName.
- Все объекты и свойства, на которые ссылается путь свойства, должны быть общедоступными.
- Конечное свойство (свойство, которое является последним именованным свойством в пути) должно быть общедоступным, доступным для чтения и записи и быть свойством зависимости.
- Конечное свойство должно иметь тип свойства, который может быть анимирован одним из широких классов типов анимации (цветные анимации, двойные анимации, анимации точек , ObjectAnimationUsingKeyFrames).
Класс PropertyPath
Класс PropertyPath — это базовый тип свойства Binding.Path для сценария привязки.
Большую часть времени можно применить PropertyPath в XAML без использования кода вообще. Но в некоторых случаях может потребоваться определить объект PropertyPath с помощью кода и назначить его свойству во время выполнения.
PropertyPath имеет конструктор PropertyPath(String) и не имеет конструктора по умолчанию. Строка, передаваемая этому конструктору, представляет собой строку, определяемую с помощью синтаксиса пути свойства, как описано ранее. Это также та же строка, которую вы используете для назначения пути в качестве атрибута XAML. Единственным другим API класса PropertyPath является свойство Path , которое доступно только для чтения. Это свойство можно использовать в качестве строки построения для другого экземпляра PropertyPath .
Связанные темы
Windows developer