2010-04-10 8 views
14

코드에서 DataTemplate을 어떻게 생성하고 (C# 사용) DataTemplate에 컨트롤을 추가 할 수 있습니까?코드에서 DataTemplate을 정의하는 방법은 무엇입니까?

<data:DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <Border> 
      <Border Margin="10" Padding="10" BorderBrush="SteelBlue" 
       BorderThickness="3" CornerRadius="5"> 
       <TextBlock Text="{Binding Description}" TextWrapping="Wrap" 
        FontSize="10"> 
       </TextBlock> 
      </Border> 
     </Border> 
    </DataTemplate> 
</data:DataGrid.RowDetailsTemplate> 

저는 Sivlerlight를 사용하고 있습니다.

답변

9

유일한 방법은 실버 라이트에서 DataTemplateXamlReader을 사용하는 것입니다 만들 수 있습니다. 기본적으로 XAML을 문자열로 전달하면 DataTemplate이 반환됩니다. Byron의 솔루션은 WPF에 적용되지만 Silverlight는 (내 지식에 따라) FrameworkElementFactory을 지원하지 않습니다. DataGridTemplateColumn에 대한 옵션 # 2의

Scott Morrison: Defining Silverlight DataGrid Columns at Runtime

를 적어 둡니다.

+0

+1 이것은 정확합니다. 개인적으로 LinqToXml 개체를 사용하여 필요한 Xaml을 빌드하는 것을 선호하지만 궁극적으로 결과 문자열을 프로그래밍 방식으로 DataTemplate을 만들기 위해 XamlReader에 전달해야합니다. – AnthonyWJones

1

Microsoft는 MSDN에서 "Data Templating Overview"이라는 좋은 기사를 가지고 있습니다. 나는 거기에서 시작할 것이다.

업데이트 : 예. "코드"에 대한 귀하의 요구 사항을 읽었습니다. 이 게시물에 비틀 거릴 수있는 사람을 위해 링크를 남겨 두겠습니다.

4

FrameworkElementFactory을 사용하여 TextBlock과 같은 컨트롤을 추가 할 수 있습니다. 그런 다음 VisualBree DataTemplateTextBlock을 추가 할 수 있습니다. 그래서 같이 : 내가 아는 한

//Create binding object and set as mode=oneway 
Binding binding = new Binding(); 
binding.Path = new PropertyPath("SomePropertyPathName"); 
binding.Mode = BindingMode.OneWay; 

//get textblock object from factory and set binding 
FrameworkElementFactory textElement = new FrameworkElementFactory(typeof(TextBlock)); 
textElement.SetBinding(TextBlock.TextProperty, binding); 

//apply textblock to datatemplate 
dataTemplate.VisualTree = textElement; 
+2

OP는 그가 내가 아는 한 FrameworkElementFactory를 지원하지 않는 Silverlight를 사용한다고 말합니다. – Josh

+0

그래서 그는, 내 실수 야. –

관련 문제