2011-10-31 3 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> 

여기 내 코드입니다. 그 문제는 없습니다. 나는 adorner를 만들었고 내가 원할 때 각 버튼에 adorner를 추가하고 싶습니다. 내가 버튼을 얻는 법을 모르는만큼 조금 어렵다. CanvasTableMap.Items는 모델을 반환하므로 컨트롤에 효율적으로 액세스하는 방법을 알지 못합니다.바운드 자녀에게 adorner를 추가 하시겠습니까?

답변

0

그렇게하는 쉬운 방법은 단추의 Loaded 이벤트에 대한 핸들러를 정의하고, 그 처리기에서 adorner을 추가하는 것입니다

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 
    ... 
} 

코드 숨김을 사용하지 않으려면 creat 첨부 된 동작 (System.Windows.Interactivity 또는 첨부 된 속성 만들기)

0

ItemContainerGenerator을 사용하여 데이터 (ContainerFromItem)에서 생성 된 컨트롤을 가져올 수 있습니다. 그런 방식으로 일하는 것은 좋은 생각이 아닙니다.

+0

대체 방법 Microsoft 담당자는 코드로 작성했습니다. 나는 해킹을 구현할 시간이 없다. ContainerFromItem 전달할 매개 변수를 모른다. – GorillaApe

+0

@Parhs : Uhm. 데이터 항목? 문서를 읽지 않았 니? –