我正在使用Windows 8应用程序。我必须在画布内放置几个控件(图像,矩形)。如果我直接使用它,当我在孩子上使用“Canvas.Left”附加属性(上述控件)时,一切正常。不过,我想使用MVVM。因此,我现在使用像这样的ItemsControl:为ItemsControl项目设置Canvas.Left
<ItemsControl ItemsSource="{Binding MyObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Image}" Visibility="{Binding IsImage, Converter={StaticResource boolConverter}}" />
<Rectangle Canvas.Left="{Binding Left}" Canvas.Top="{Binding Top}" Width="{Binding Width}" Height="{Binding Height}" Fill="{Binding Fill}" Visibility="{Binding IsNoImage, Converter={StaticResource boolConverter}}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
除了附加的Canvas属性,绑定正在工作。经过一番研究后,我发现这是因为ItemsControl用ContentPresenter封装了它的子节点。因此,我试图让使用解决方案,我就发现了计算器,但没有成功:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Left}" />
</Style>
</ItemsControl.ItemContainerStyle>
添加该代码没有设置Canvas.Left属性(甚至去除的DataTemplate中绑定后)。
我错过了什么?提前致谢。
可能与http://stackoverflow.com/questions/11857505/how-do-i-do-bindings-in-itemcontainerstyle-in-winrt有关 – onelaview