我以编程方式创建一个矩形网格,每个矩形内部都有一个Label。我使用Event Command检测了哪个矩形被点击了。我的问题是,如果我尝试绑定矩形名称,我会收到此错误: 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>
我尝试使用
绑定rectanle<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; }
}
答案 0 :(得分:2)
不建议对Name属性进行数据绑定。如果绑定name属性,则名称将变为动态。如果名称是动态的,那么您无法从代码隐藏中引用控件。因此你得到了错误&#34; Uid或Name属性值不允许使用MarkupExtensions,因此{Binding ID}&#39;无效&#34;。
如果你真的想绑定ID属性并在你的代码后面或View模型中使用它,那么你可以将它绑定到Tag属性。
答案 1 :(得分:0)
我使用Tag代替Name
解决了问题