2012-11-06 2 views
0

C# 코딩의 페이지 리소스 요소에 어떻게 액세스합니까? 내 XAML에는 다음 코드 조각이 있습니다. C# 코드에서 image 요소에 액세스하려고하지만 액세스 할 수 없습니다.액세스 페이지 리소스 요소

<Page.Resources> 
<DataTemplate x:Key="Standard250x250ItemTemplate"> 
    <Grid HorizontalAlignment="Left" Width="150" Height="150"> 
     <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> 
      <Image x:Name="image" Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}" /> 
     </Border>  
    </Grid> 
</DataTemplate> 

답변

1

DataTemplate 리소스가로드 될 때까지 인스턴스화되지 않기 때문에 액세스 할 수 없습니다. 먼저로드하려면 다음과 같이해야합니다.

var dataTemplate = (DataTemplate)this.Resources["Standard250x250ItemTemplate"]; 
var grid = dataTemplate.LoadContent(); 

그런 다음 요소 트리를 탐색하여 이미지를 가져옵니다.

많은 시나리오에서 더 나은 방법은 XAML에서 이미지에 첨부하고 연결된 이미지와 관련된 코드를 쓸 수있는 첨부 된 종속성 속성 또는 연결된 동작을 정의하는 것입니다.

0

액세스하려는시기에 따라 다릅니다. 이미 렌더링 된 요소의 이미지 컨트롤에 액세스하려고 할 경우에 당신은 같은 ItemContainerGenerator 사용할 수 있습니다

//assumes using a ListView 
    var item = (ListViewItem)listView.ItemContainerGenerator.ContainerFromItem(myModel); 

    // traverse children 
    var image = GetChildOfType<Image>(item); 
    // use the image! 

private T GetChildOfType<T>(DependencyObject obj) 
{ 
    for(int i = 0; i< VisualTreeHelper.GetChildrenCount(obj); i++) 
    { 
     var child = VisualTreeHelper.GetChild(obj, i); 
     if(child is T) return child as T; 

     T item = GetChildOfType<T>(child); 
     if(item != null) return item; 
    } 
    return null; 
} 

을 이미지의 속성을 변경해야 할 경우, 그뿐만 아니라 결합을 통해 수행 할 수 있습니다.