首先,我正在编写一个使用 C# 和 XAML 为 Windows 8 编写 Windows 应用商店应用程序。我正在使用GridView
来显示分组的对象集合。每个组都显示为显示关联项目的单个列。
这工作正常,但我希望每列的ItemsPanel
都是Canvas
面板。
<GroupStyle.Panel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</GroupStyle.Panel>
现在,我在 xaml 中将Canvas.Top
设置为静态数字。这符合预期。
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="Canvas.Top" Value="50" />
</Style>
</GridView.ItemContainerStyle>
但是如果我使用数据绑定,它不起作用。
<Setter Property="Canvas.Top" Value="{Binding Distance}" />
绑定是否不适用于使用 Visual Studio 2012 进行 Windows 8 应用商店应用开发中的样式和设置?如何解决此问题,以便我可以为属性中的每个项目动态设置 Canvas.Top?
WinRT 不支持样式资源库中的绑定,类似于版本 5 之前的 Silverlight。请参阅此答案,该答案也与ItemContainerStyle
中的绑定有关(建议使用某些附加属性的解决方法)。
或者,可以在生成项容器时在代码中设置属性值/绑定 - 对GridView
进行子类化,并重写类似 ItemsControl.PrepareContainerForItemOverride 的内容,以设置从项容器到模型项的绑定。
样式中的属性绑定到 ViewModel。
Canvas.Top 是一种附加财产。
如果要动态更改每个项的属性 Canvas.Top
,可以在代码隐藏中执行此操作。
提取每个GridViewItem
的Canvas
,然后设置其 Top 属性。