2015-06-29 63 views
1

我通过编程创建了一个矩形网格,每个矩形内都有一个Label。我使用事件命令检测哪个矩形已被点击。我的问题是,如果我尝试绑定矩形名称,我得到此错误: MarkupExtensions不允许用于Uid或Name属性值,因此'{Binding ID}'无效 所以我可以只检索名称我点击标签。有没有解决这个问题的方法? 我的XAML:以编程方式绑定名称ItemsControl

<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中的类rectanle绑定是

public class Cask 
{ 
    public string ID { get; set; } 
    public Int64 Left { get; set; } 
    public Int64 Top { get; set; } 
    public SolidColorBrush Color { get; set; } 
} 
+0

你怎么试着绑定矩形名? – Joseph

+0

什么是ID字段的类型?你能显示这个属性的声明吗? –

+0

谢谢你的回复,我编辑了我的问题,向你展示绑定和类 – Parni

回答

2

数据绑定Name属性不可取。如果您绑定了名称属性,则名称变为动态。如果名称是动态的,那么您不能从代码隐藏中引用控件。因此你得到了错误“MarkupExtensions不允许用于Uid或Name属性值,所以'{Binding ID}'无效”。

如果您确实想绑定ID属性并在后面的代码或View模型中使用它,则可以将其绑定到Tag属性。

0

我解决了使用标签,而不是名称