我注意到它可能返回就像從一個值轉換器和綁定的魔力「可見」,「暈倒」,「圖像/ 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);
}
據然後簡單地應用了類型轉換器的情況下手動
的類型轉換器的屬性也可以在屬性的類型聲明,例如,在刷類本身。你可能希望你的代碼也在那裏檢查。 – foson 2011-05-10 15:34:41