2011-10-31 60 views
0
<ItemsControl Name="CanvasTableMap" ItemsSource="{Binding}" ItemsPanel="{DynamicResource ItemsPanelTemplate1}" ItemTemplate="{DynamicResource DataTemplate1}"> 
    <ItemsControl.Resources> 
     <ItemsPanelTemplate x:Key="ItemsPanelTemplate1"> 
      <WrapPanel Background="{DynamicResource ContentBackground}" />   
     </ItemsPanelTemplate> 
     <DataTemplate x:Key="DataTemplate1"> 
      <Button Canvas.Left="100" Content="{Binding Name}" Template="{DynamicResource ButtonTableTemplate}"></Button> 
     </DataTemplate> 
    </ItemsControl.Resources>  
</ItemsControl> 

這是我的code.No問題。我已經創建了一個裝飾者,我想在每個按鈕的時候添加一個裝飾者。這是有點困難,因爲我不知道如何得到按鈕。 CanvasTableMap.Items返回模型,所以我不知道如何有效地訪問控件。將裝飾者添加到綁定的兒童?

回答

0

一個簡單的方法來做到這一點是確定的處理程序Loaded事件的按鈕,並在處理程序中添加裝飾器:

XAML

<Button Canvas.Left="100" Content="{Binding Name}" ... Loaded="Button_Loaded" /> 

代碼隱藏

private void Button_Loaded(object sender, RoutedEventArgs e) 
{ 
    var button = (Button)sender; 
    var layer = AdornerLayer.GetAdornerLayer(button); 

    // Add the adorner 
    ... 
} 

如果你不想使用代碼隱藏,你可以創建e附加行爲(與System.Windows.Interactivity或通過創建附加屬性)

0

您可以使用ItemContainerGenerator獲取從數據創建的控件(ContainerFromItem)。儘管這樣做通常不是一個好主意。

+0

有什麼替代方法?微軟官方的裝飾方式是通過代碼。我沒有時間實施黑客。 ContainerFromItem我不知道要傳遞什麼參數 – GorillaApe

+0

@Parhs:嗯。數據項?你沒看過文檔嗎? –