2011-01-07 3 views
0

예를 들어 template.xaml에 아래 코드가 있습니다.xaml에서 리소스 사전을 통해 C#으로 요소를 가져올 수 있습니까?

<Border x:Name="PART_ButtonNormal" Grid.Column="0"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Border Name="PART_ImageBorder" Grid.Column="0"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="Auto"/> 
       </Grid.RowDefinitions> 
       <Image Margin="2" Width="16"           Source="{Binding Path=SmallIcon, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/> 
       <Border Height="20" Grid.Row="1" Background="Red"/> 
      </Grid> 
     </Border> 
     <TextBlock Grid.Column="1" x:Name="PART_Text" Text="{TemplateBinding Label}" 
            Foreground="{TemplateBinding Foreground}" 
            FontFamily="{TemplateBinding FontFamily}" 
            FontSize="{TemplateBinding FontSize}" 
            VerticalAlignment="{TemplateBinding VerticalAlignment}"       
            HorizontalAlignment="{TemplateBinding HorizontalAlignment}" 
            Margin="2,0,4,0"/> 
    </Grid> 
</Border> 

이 xaml은 리소스 사전을 통해 Wrapper.cs 클래스에서 읽습니다. 그러면 Wrapper.cs의 template.xaml에서 Image 요소에 어떻게 액세스 할 수 있습니까?

제발 나에게 해결책을 주시겠습니까?. 템플릿이 실제 Control에 적용 후

감사합니다, 데이비드 C

답변

0

당신이 Image 인스턴스를 원하십니까? Control에 적용하기 전에 ControlTemplate 자체를 수정하려는 경우 가능한지 확신 할 수 없습니다.

public Image FindImage(Control parent) 
{ 
    Queue<DependencyObject> items = new Queue<DependencyObject>(); 
    items.Enqueue(parent); 

    while (items.Count > 0) 
    { 
     var item = items.Dequeue() as Visual; 
     if (item is Image) 
      return item; 

     var count = VisualTreeHelper.GetChildrenCount(item); 
     for (int i = 0; i < count; ++i) 
      items.Enqueue(VisualTreeHelper.GetChild(item, i)); 
    } 
} 
: 템플릿이 적용되는 특정 Control에서 이미지를 얻으려고 노력하는 경우

그러나, 당신은 단지 시각적 트리를 걸을 수있다

관련 문제