2008-09-26 3 views
7

리소스 키를 제공하지 않고 코드에서 ResourceDictionary에 리소스를 추가 할 수 있습니까?키없이 코드에서 XAML 리소스 만들기

는 예를 들어, 내가 XAML에서이 자원을 가지고

<TreeView.Resources> 
    <HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}" 
     ItemsSource="{Binding Path=Value.Values}"> 
      <TextBlock Text="{Binding Path=Name}" /> 
    <HierarchicalDataTemplate> 
</TreeView.Resources> 

내가 코드에서 동적으로 자원을 생성하고 트 리뷰있는 ResourceDictionary에 추가해야합니다. 그러나 Key가없는 XAML은 기본적으로 모든 FieldPropertyInfo 유형에 사용된다는 것을 의미합니다. 키없이 코드의 리소스에 추가하는 방법이 있습니까? 아니면 키를 사용할 수 있고 모든 FieldPropertyInfo 형식에 여전히 사용되는 방법이 있습니까?

는 여기에 지금까지 C#에서 한 일입니다 : 분명히

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); 

fieldPropertyTemplate.ItemsSource = new Binding("Value.Values"); 

this.Resources.Add(null, fieldPropertyTemplate); 

, 키 널 (null)이 작동하지 않습니다있는 ResourceDictionary에 리소스를 추가.

답변

8

템플릿이 키로에 적용 할 유형을 사용

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo"); 

fieldPropertyTemplate.SetBinding(
    HierarchialDataTemplate.ItemSourceProperty, 
    new Binding("Value.Values"); 
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate); 

코드를했다 작동하지 않는 이유 당신의 실제로 바인딩 설정되지 않은합니다. 바인딩을 바인딩하려는 속성을 사용하여 SetBinding을 호출해야합니다.

0

템플릿이 키로에 적용 할 유형 사용 :이 유형을 제공하는 위의 템플릿과 마찬가지로

this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate); 

합니다. 이름이나 유형을 입력해야합니다.

+0

이 실행되지만 템플릿 TreeView에 의해 사용되고 있지 않습니다. Resource 키가 사용되지 못하게하는 것과 같은 것 같습니다. –

+0

@ 오리온 : 그래서 내 대답을보고 너를 완전히 복사 해 내 복사 했니? 정말 고상한 ... –

관련 문제