UWP中的itemscontrol不绑定到可观察集合项的坐标
本文关键字:集合 观察 坐标 中的 itemscontrol 绑定 UWP | 更新日期: 2023-09-27 18:13:12
我的代码没有绑定到可观察对象Collection中项的X和Y属性。怎么了:
<ItemsControl ItemsSource="{Binding LED}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="SkyBlue"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding X}" />
<Setter Property="Canvas.Top" Value="{Binding Y}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Stroke="{Binding Color}" Fill="{Binding FillColor}" StrokeThickness="1" Width="40" Height="40"></Ellipse>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
它绑定到Color和FillColor。下面是Shape类,它被存储在ObservableCollection LED:
中class Shape
{
public int X { get; private set; }
public int Y { get; private set; }
public string Color { get; private set; }
public string FillColor { get; private set; }
public Shape (int x, int y, string color, string fillColor)
{
X = x;
Y = y;
Color = color;
FillColor = fillColor;
}
}
Setter的文档。Value属性有如下说明:
Windows Presentation Foundation (WPF)和Microsoft Silverlight支持使用绑定表达式为样式中的Setter提供值。 Windows运行时不支持Setter的Binding用法。值(Binding不会求值,Setter也没有作用,您不会得到错误,但也不会得到期望的结果)。当您从WPF或Silverlight XAML转换XAML样式时,将任何绑定表达式的用法替换为设置值的字符串或对象,或将值重构为共享的{StaticResource}标记扩展值,而不是绑定获得的值。
作为一个解决方案,你可以尝试使用RenderTransform代替:
<Ellipse Stroke="{Binding Color}" Fill="{Binding FillColor}" StrokeThickness="1" Width="40" Height="40">
<Ellipse.RenderTransform>
<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
</Ellipse.RenderTransform>
</Ellipse>