2011-05-09 99 views
2

我注意到它可能返回就像從一個值轉換器和綁定的魔力「可見」,「暈倒」,「圖像/ xyz.png」或「#FFB3D1」管理,以數字的字符串出來。隱藏/顯示UI元素,找到xyz.png圖像或彩色的東西粉紅...XAML自動類型轉換

我已經採取了這種理所當然的很長一段時間,現在它不與我最新的代碼打交道,所以我的問題是我該如何手動調用此功能?


說明:

我已經通過創建一個自定義的MarkupExtension,它附加一個多轉換它連接到一個MultiBinding並返回初始化結合擴大規模。但是,當這個多轉換器返回像「#FFB3D1」或「紅色」的字符串時,似乎沒有任何事情發生。

// PseudoCode from my MarkupExtension, setting up & returning the binding/multi-converter 
public override object ProvideValue(IServiceProvider serviceProvider) 
{ 
    MultiBinding outputBinding = new MultiBinding();  
    foreach (Binding b in bindings) 
    { 
     outputBinding.Bindings.Add(b); 
    }  

    outputBinding.Converter = converter; 
    return outputBinding.ProvideValue(serviceProvider); 
} 

我相信那是因爲我在代碼中創建Multibinding +轉換器,它的地方跳過的步驟在Binding.Magic命名空間。


解決方案:

public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     // get targets 
     IProvideValueTarget serv = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget)); 

     // get Type Converter 
     object[] typeConverterAttributes = ((DependencyProperty)serv.TargetProperty).PropertyType.GetCustomAttributes(typeof(TypeConverterAttribute), true); 
     TypeConverter typeConverter = null; 

     if (typeConverterAttributes.Length > 0) 
     { 
      TypeConverterAttribute attr = (TypeConverterAttribute)typeConverterAttributes[0]; 
      typeConverter = (TypeConverter)Activator.CreateInstance(Type.GetType(attr.ConverterTypeName), false); 
     } 

據然後簡單地應用了類型轉換器的情況下手動

+1

的類型轉換器的屬性也可以在屬性的類型聲明,例如,在刷類本身。你可能希望你的代碼也在那裏檢查。 – foson 2011-05-10 15:34:41

回答