首先,我正在使用C#和XAML为Windows 8编写Windows应用商店应用。
我使用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}" />
使用Visual Studio 2012,Windows 8应用开发中的样式和设置器上的绑定不起作用吗? 我如何解决这个问题,我可以为属性中的每个项动态设置Canvas.Top?
答案 0 :(得分:1)
WinRT中不支持样式设置器中的绑定,类似于版本5之前的Silverlight。请参阅this answer,其中还涉及ItemContainerStyle
中的绑定(建议使用某些附加属性进行解决方法)。
或者,您可以在生成项容器时在代码中设置属性值/绑定 - 继承GridView
并覆盖类似ItemsControl.PrepareContainerForItemOverride的内容,以设置从项容器到模型项的绑定。
答案 1 :(得分:0)
似乎将样式中的属性绑定到ViewModel不可用
Canvas.Top是一种附属属性。
如果您想动态更改Canvas.Top
,you can do it in code-behind的每个项目的属性。
提取出每个GridViewItem
的{{1}},然后设置其顶级属性。