문제

코드에서 Silverlight 데이터 템플릿을 만들려면 어떻게 해야 합니까?WPF에 대한 예제는 많이 봤지만 Silverlight에 대한 예제는 없습니다.

편집하다:아래 산티아고의 답변을 기반으로 현재 이것을 사용하고 있는 코드는 다음과 같습니다.

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

이것은 정말 훌륭하게 작동하며 즉시 바인딩을 변경할 수 있습니다.

도움이 되었습니까?

해결책

프로그래밍 방식으로 만들 수는 없지만 다음과 같은 코드의 XAML 문자열에서 로드할 수 있습니다.

    public static DataTemplate Create(Type type)
    {
        return (DataTemplate) XamlReader.Load(
            @"<DataTemplate
                xmlns=""http://schemas.microsoft.com/client/2007"">
                <" + type.Name + @"/>
              </DataTemplate>"
          );
    }

위의 코드 조각은 필요한 콘텐츠가 포함된 사용자 컨트롤일 수 있는 단일 컨트롤을 포함하는 데이터 템플릿을 생성합니다.

다른 팁

이 코드에는 요소가 발견되지 않은 예외가 발생하는 몇 가지 문제가 있었습니다.참고로 DataTemplate에 네임스페이스가 포함되어 있어야 한다는 것이었습니다...

private DataTemplate Create(Type type)
        {
            string xaml = @"<DataTemplate 
                xmlns=""http://schemas.microsoft.com/client/2007""
                xmlns:controls=""clr-namespace:" + type.Namespace + @";assembly=" + type.Namespace + @""">
                <controls:" + type.Name + @"/></DataTemplate>";
            return (DataTemplate)XamlReader.Load(xaml);
        }

예, Silverligt 4는 WPF의 현재 버전보다 오래되었습니다.템플릿을 리소스로 추가하는 경우, 즉내가했던 것처럼 application.xaml ressources에 usercontrol 템플릿을 추가했습니다.XAML에서 태그가 IDictionary를 구현한 경우 x:Key 특성을 사용할 수 있습니다.그렇게

   <ResourceDictionary>
    <DataTemplate x:Key="TextBoxEditTemplate">
    <Some user control x:Name="myOwnControl" />
    </DataTemplate>
   </ResourceDictionary>

좋아요!다음과 같이 코딩하여 템플릿에 도달할 수 있습니다. Application.Current.resources["TextBoxEditTemplate"]반면에 이 템플릿의 멤버를 찾는 일부 방법은 작동하지 않습니다.이 DataTemplate 외에는 IDictionary를 구현하지 않으므로 이 dataTemplate의 항목에 대해 x:Key 속성을 할당할 수 없습니다.예에서는 myOwnControl로 사용됩니다.

xaml이 없으면 현재 Silverlight에는 완전 동적 코드 숨김 DataTemplates 생성에 대한 몇 가지 제한 사항이 있습니다. WPF에서도 작동합니다.

어쨌든 이 시점에서 가장 좋은 해결책은 datatemplate에 대한 XAML 스크립트를 만드는 것입니다. DataTemplate 스크립트에 일부 값 요소를 지정할 수 있습니다.우리는 자체 사용자 컨트롤을 만들었고, 의존성 개체 속성(DependencyObjectProperty)을 사용하여 몇 가지 속성을 가지고 있습니다.

마지막으로 객체에 상속이 없는 경우, 즉상속할 수 있는 MyControl:UserControl이 아닙니다. MyObject:DependencyObject 이 방법으로 Application.Current.Resources.FirstChilderen...과 같은 호출을 통해 객체에 접근할 수 있습니다.

FindName은 WPF에서만 작동합니다.

MSDN에서 인용:

데이터 템플릿을 만들기 위한 콘텐츠를 정의하는 XAML 사용법은 설정 가능한 속성으로 노출되지 않습니다.이는 DataTemplate 개체 요소의 XAML 처리에 내장된 특수 동작입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top