Использование Canvas в качестве ItemsPanelTemplate и Binding Canvas.Top не работает
Прежде всего я пишу приложение для Магазина Windows для Windows 8 с использованием C# и XAML. Я использую GridView
для отображения сгруппированной коллекции объектов. Каждая группа отображается в виде одного столбца, в котором отображаются связанные элементы.
Это отлично работает, но я хочу ItemsPanel
каждого столбца, чтобы быть Canvas
Панель.
<GroupStyle.Panel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</GroupStyle.Panel>
Теперь я установил Canvas.Top
на статический номер прямо в XAML. Это работает как ожидалось.
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="Canvas.Top" Value="50" />
</Style>
</GridView.ItemContainerStyle>
Но если я использую привязку данных, это не работает.
<Setter Property="Canvas.Top" Value="{Binding Distance}" />
Не работает ли привязка к стилям и сеттерам в разработке приложений для Магазина Windows 8 с помощью Visual Studio 2012? Как я могу это исправить, чтобы я мог динамически устанавливать Canvas.Top для каждого элемента из свойства?
2 ответа
Привязка в установщиках стилей не поддерживается в WinRT, подобно Silverlight до версии 5. Смотрите этот ответ, который также относится к привязке в ItemContainerStyle
(Обходной путь предлагается с некоторыми прикрепленными свойствами).
В качестве альтернативы вы можете установить значение свойства / привязку в коде при создании контейнера элемента - подкласс GridView
и переопределить что-то вроде ItemsControl.PrepareContainerForItemOverride, чтобы установить привязки из контейнера элемента к элементу модели.
Кажется, что привязка свойства в стилях к ViewModel недоступна.
Canvas.Top является своего рода прикрепленным свойством.
Если вы хотите динамически изменить свойство каждого элемента Canvas.Top
Вы можете сделать это в коде позади.
Извлечь каждый GridViewItem
"s Canvas
а затем установите его свойство Top.