以编程方式绑定名称 ItemsControl
Programmatically Binding Name ItemsControl
我以编程方式创建了一个矩形网格,每个矩形内部都有一个标签。我检测使用事件命令单击了哪个矩形。我的问题是,如果我尝试绑定矩形名称,我会收到此错误:
Uid 或名称 属性 值不允许使用 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 的 class 是
public class Cask
{
public string ID { get; set; }
public Int64 Left { get; set; }
public Int64 Top { get; set; }
public SolidColorBrush Color { get; set; }
}
我用 Tag 而不是 Name 解决了问题
不建议对名称 属性 进行数据绑定。如果绑定名称 属性,则名称变为动态名称。如果名称是动态的,则您无法从代码隐藏中引用该控件。因此,您收到错误消息“Uid 或 Name 属性 值不允许使用 MarkupExtensions,因此‘{Binding ID}’无效”。
如果您真的想绑定 ID 属性 并在您的代码隐藏或视图模型中使用它,那么您可以将它绑定到标签 属性。
我以编程方式创建了一个矩形网格,每个矩形内部都有一个标签。我检测使用事件命令单击了哪个矩形。我的问题是,如果我尝试绑定矩形名称,我会收到此错误: Uid 或名称 属性 值不允许使用 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 的 class 是
public class Cask
{
public string ID { get; set; }
public Int64 Left { get; set; }
public Int64 Top { get; set; }
public SolidColorBrush Color { get; set; }
}
我用 Tag 而不是 Name 解决了问题
不建议对名称 属性 进行数据绑定。如果绑定名称 属性,则名称变为动态名称。如果名称是动态的,则您无法从代码隐藏中引用该控件。因此,您收到错误消息“Uid 或 Name 属性 值不允许使用 MarkupExtensions,因此‘{Binding ID}’无效”。
如果您真的想绑定 ID 属性 并在您的代码隐藏或视图模型中使用它,那么您可以将它绑定到标签 属性。