2011-09-29 5 views
1

제네릭 형식을 처리하기 위해 기본 System.Windows.Markup.TypeExtension을 대체하는 새 TypeExtension 클래스를 작성했습니다.IXamlTypeResolver를 사용하여 제네릭 형식 확인

내가 TypeExtention 클래스를 작성했던
  1. , MarkupExtension의 상속은 (는 CK의 :

    <DataTemplate DataType="{ck:Type [here a generic type name]}"> 
    

    이 작동하는 방법이다 : 그것은처럼 XAML은 여러 가지 방법으로 일반적인 종류의 작업을 수행 할 수 있습니다 : 나는 ProvideValue 메서드를 재정의 것

  2. 의 예에서 유형) IXamlTypeResolver

    IXamlTypeResolver 서비스 = p.GetService (사실)에 해결 호출;

    _type = service.Resolve (_typeName);

그래서 .NET 3.5에서는 "local : IConfigItemProperty`1"과 같은 유형을 해결할 수 있습니다. 그러나 이제 .NET 4 (WPF 4)에서 resolve 메서드는 예외를 throw합니다.

문자 '' was unexpected in string 'local:IConfigItemProperty'. XAML 형식 이름이 잘못되었습니다.

.NET 4.0은 '' '을 (를) 더 이상 지원하지 않습니까?

답변

0

게시물이 약간 낡았지만 해결책을 찾던 다른 개발자에게 답을했습니다. 4.0에서 그들은 독자가 일반을 다루는 방식을 바꾸는 것처럼 보입니다. IXamlTypeResolver 서비스에 의한 '' '에 대한 지원 부족은 회귀가 전혀 기록되지 않은 반면 버그 인 것 같습니다. generic을 사용하려면 generic : generic의 인수를 나열하는 x : TypeArguments로 전환해야 할 수 있습니다.

C 번호

public class GraphBase<N,L,P> : IGraph<N,L,P> 
{ 
... 
} 

XAML

<?xml version="1.0" encoding="utf-8" ?> 
<GraphBase 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns="clr-namespace:MyGeoLive.Topology;assembly=MyGeoLive.Topology" 
     xmlns:System="clr-namespace:System;assembly=mscorlib" 
     x:TypeArguments="System:String,System:String,System:String" > 

</GraphBase> 
관련 문제