2011-06-16 89 views
2

我有以下XAML,我需要在运行时从代码隐藏文件更改imageRemoveButton的可见性。我如何访问该按钮?获取DataTemplate中的元素

<ItemsControl x:Name="ImagesItemsControl"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="#ffdddddd" 
        BorderThickness="0,0,0,1"> 
       <Grid Margin="0,2"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="15" /> 
         <ColumnDefinition /> 
         <ColumnDefinition Width="20" /> 
        </Grid.ColumnDefinitions> 

        <Grid Grid.Column="1" 
          VerticalAlignment="Center"> 
         <TextBlock Text="{Binding Name}" 
             TextWrapping="Wrap" /> 
        </Grid> 
        <Button Grid.Column="3" 
          Width="20" 
          Height="20" 
          Content="X" 
          Template="{StaticResource ButtonAddTab}" 
          Style="{StaticResource ButtonWizard}" 
          Tag="{Binding}" 
          x:Name="imageRemoveButton" 
          Click="ImageRemoveButton_Click" /> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

您可能需要使用数据模板样式和触发器 – Ram 2011-06-16 11:32:58

+0

看看:http://msdn.microsoft.com/en-us/library/bb613579%28v=vs.110%29.aspx – 2014-04-11 08:59:38

回答

0

您不能在模板中引用名称元素。没有匹配的模板生成的代码隐藏/设计器属性。

您想要将模板中控件的可见性绑定到数据项的属性。这意味着你将需要添加一个属性到你的数据项。你能提供你的数据项目的更多细节吗?如果该属性是一个布尔值,使用VisibilityConvertor(在这个网站上一毛钱)。

认为模板总是需要从绑定中提取设置,而不是从外部填充设置。

0

尝试使用Source绑定到将管理按钮的可见性状态的类。将属性添加到所有数据项将是痛苦的,但如果需要根据数据项的属性设置按钮的可见性,则可能需要该属性。按照标准MVVM模式,您可以控制C#中按钮的可见性。如果你需要一个特定的按钮实例,你可以添加一个Loaded事件处理程序并相应地缓存它。

1

使用按钮上的加载事件来保存对cs文件中按钮的引用。在需要更改可见性时使用此参考。

+0

- 1:2 upvotes ???这不仅是模糊的*和不正确的*,而且在Silverlight中将个别模板控件硬编码到代码隐藏是一种非常糟糕的做法。模板应始终通过绑定来提取值。 – 2014-04-11 12:59:08