2011-06-16 53 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