使用Canvas作为ItemsPanelTemplate和绑定Canvas.Top不起作用

时间:2012-11-21 09:37:35

标签: c# xaml data-binding windows-store-apps itemcontainerstyle

首先,我正在使用C#和XAML为Windows 8编写Windows应用商店应用。 我使用GridView来显示分组的对象集合。 每个组都显示为一个列,其中显示了相关的项目。

这项工作正常,但我希望每列的ItemsPanelCanvas小组。

<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?

2 个答案:

答案 0 :(得分:1)

WinRT中不支持样式设置器中的绑定,类似于版本5之前的Silverlight。请参阅this answer,其中还涉及ItemContainerStyle中的绑定(建议使用某些附加属性进行解决方法)。

或者,您可以在生成项容器时在代码中设置属性值/绑定 - 继承GridView并覆盖类似ItemsControl.PrepareContainerForItemOverride的内容,以设置从项容器到模型项的绑定。

答案 1 :(得分:0)

似乎将样式中的属性绑定到ViewModel不可用 Canvas.Top是一种附属属性。
如果您想动态更改Canvas.Topyou can do it in code-behind的每个项目的属性。
提取出每个GridViewItem的{​​{1}},然后设置其顶级属性。