2008-09-26 34 views
7

Có cách nào để thêm tài nguyên vào ResourceDictionary từ mã mà không cung cấp cho nó khóa tài nguyên không?Tạo tài nguyên XAML từ mã không có khóa

Ví dụ, tôi có tài nguyên này trong XAML:

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

tôi cần phải tạo tài nguyên này tự động từ mã và thêm nó vào TreeView ResourceDictionary. Tuy nhiên, trong XAML không có Khóa nghĩa là nó được sử dụng, theo mặc định, cho tất cả các kiểu FieldPropertyInfo. Có cách nào để thêm nó vào các nguồn tài nguyên trong mã mà không có một chìa khóa hoặc là có một cách tôi có thể sử dụng một chìa khóa và vẫn có nó được sử dụng trên tất cả các loại FieldPropertyInfo?

Dưới đây là những gì tôi đã làm trong C# cho đến nay:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); 

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

this.Resources.Add(null, fieldPropertyTemplate); 

Rõ ràng, thêm tài nguyên vào các ResourceDictionary null chìa khóa không hoạt động.

Trả lời

8

Sử dụng các loại mà bạn muốn mẫu để áp dụng là chìa khóa:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo"); 

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

Lý do mã của bạn không hoạt động là bạn đã không thực sự thiết lập các ràng buộc. Bạn cần gọi SetBinding, với thuộc tính bạn muốn ràng buộc ràng buộc.

0

Sử dụng các loại mà bạn muốn mẫu để áp dụng là chìa khóa:

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

Như với mẫu của bạn ở trên bạn cung cấp một loại. Bạn phải cung cấp tên hoặc loại.

+0

Mặc dù điều này chạy, mẫu không được TreeView sử dụng. Có vẻ như một cái gì đó về khóa tài nguyên đang ngăn không cho nó được sử dụng. –

+0

@Orion: Vì vậy, bạn đã thấy câu trả lời của tôi, và hoàn toàn chỉnh sửa của bạn để sao chép của tôi? Thực sự sang trọng ... –

Các vấn đề liên quan