[英]Programmatically Binding Name ItemsControl
我以编程方式创建一个矩形网格,每个矩形内部都有一个Label。 我检测到使用事件命令单击了哪个矩形。 我的问题是,如果我尝试绑定矩形名称,则会出现此错误: Uid或Name属性值不允许使用MarkupExtensions,因此'{Binding ID}'无效,因此,仅当我单击名称时,才能检索名称。标签。 有解决这个问题的方法吗? 我的XAML:
<ItemsControl ItemsSource="{Binding CaskList}" HorizontalAlignment="Left" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="1680" Height="800">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown" >
<cmd:EventToCommand Command="{Binding SelCaskCommand}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Rectangle Stroke="Black" Width="64" Height="64" Fill="{Binding Color}" ></Rectangle>
<Label Content="{Binding ID}" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我试图简单地使用
<Rectangle Stroke="Black" Width="64" Height="64" Fill="{Binding Color}" Name="{Binding ID}">
绑定到Itemscontrol的类是
public class Cask
{
public string ID { get; set; }
public Int64 Left { get; set; }
public Int64 Top { get; set; }
public SolidColorBrush Color { get; set; }
}
建议不要将数据绑定到Name属性。 如果绑定名称属性,则名称将变为动态名称。 如果名称是动态的,则不能从后面的代码中引用该控件。 因此,出现错误“ Uid或Name属性值不允许使用MarkupExtensions,因此'{Binding ID}'无效”。
如果您确实想绑定ID属性,并在后面的代码或View模型中使用它,则可以将其绑定到Tag属性。
我解决了使用标签而不是名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.