2010-12-13 5 views
0

코드 뒤에서 ContentControl 내부에서 내 Grid (listBoxGrid)에 액세스하는 데 매우 어려움을 겪고 있습니다. 어떤 도움이나 포인터가 좋을 것입니다!WPF AccessControl 내부의 액세스 컨트롤

감사 라이언

<Style x:Key="ccTemplate" TargetType="{x:Type ContentControl}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ContentControl}"> 
       <Grid x:Name="listBoxGrid" TextOptions.TextFormattingMode="Display"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="200*"/> 
         <RowDefinition Height="60" /> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="80" /> 
         <ColumnDefinition Width="80" /> 
         <ColumnDefinition Width="80" /> 
         <ColumnDefinition Width="80" /> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <Grid Grid.ColumnSpan="6" > 
         <ContentPresenter /> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="{x:Type control:ListBoxControl}" TargetType="{x:Type control:ListBoxControl}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <ContentControl Style="{StaticResource ccTemplate}" x:Name="cc"> 
        <telerikNavigation:RadTreeView 
    Name="mainList" 
    ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}" 
          ItemTemplate="{DynamicResource MainDataTemplate}" 
          ItemContainerStyle="{DynamicResource MainStyle}" 
    MinWidth="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=MinWidth}" 
    ScrollViewer.HorizontalScrollBarVisibility="Auto" 
    BorderBrush="#FF00569F" 
          Background="{DynamicResource ListItemBackground}" 
    BorderThickness="1" 
          SelectionMode="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectionMode, FallbackValue=Single}" 
          IsDragDropEnabled="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsDragDropEnabled, FallbackValue=False}" 
          IsDropPreviewLineEnabled="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsDropPreviewLineEnabled, FallbackValue=True}" 
          AllowDrop="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=AllowDrop, FallbackValue=True}" 
    > 
        </telerikNavigation:RadTreeView> 
       </ContentControl> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

나는

Grid myGrid = (Grid)Template.FindName("listBoxGrid", this); 

을 시도하지만 그것은 작동하지 않습니다.

답변

2

GetTemplateChild ("PartName")을 사용하여 OnApplyTemplate() 메서드 재정의에서만 템플릿 파트에 액세스 할 수 있습니다.

+0

OnApplyTemplate 재정의에서 Grid myGrid = GetTemplateChild ("listBoxGrid")를 Grid로 시도했습니다. 여전히 myGrid는 null입니다. – Ryan

+0

사실 내가 쓴 것은 WPF에서만 Silverlight에만 적용된다는 것을 알았습니다. Template.FindName()을 사용할 수 있어야하므로 문제가 다른 곳에서 발생합니다. ContentControl의 확장 클래스에서 메서드를 호출하려고 시도 했습니까? – dain

+0

내 작은 예를보고 내 문제를 확인하십시오. 원한다면 :) http://www.vbninja.com/XAMLGridError.zip – Ryan