有關使用轉換器參數的煩人之處在於,您必須在每次要使用綁定時添加該文本。
相反,您可以將ResourceDictionary作爲轉換器的屬性,並在實例化轉換器時進行設置。轉爐
代碼:
public class SomeConverter : IValueConverter
{
private ResourceDictionary _resourceDictionary;
public ResourceDictionary ResourceDictionary
{
get { return _resourceDictionary; }
set
{
_resourceDictionary = value;
}
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//do your own thing using the _dict
//var person = value as Person
//if (person.Status == "Awesome")
// return _resourceDictionary["AwesomeBrush"]
//else
// return _resourceDictionary["NotAwesomeBrush"];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
實例化並使用轉換器:
<Window.Resources>
<local:SomeConverter x:Key="MyConverter" >
<local:SomeConverter.ResourceDictionary>
<ResourceDictionary Source="SomeRandomResourceDictionary.xaml" />
</local:SomeConverter.ResourceDictionary>
</local:SomeConverter>
</Window.Resources>
...
<StackPanel Background="{Binding CurrentPerson, Converter={StaticResource MyConverter}}" >
</StackPanel>
尼斯之一。這節省了我的一天。謝謝。 – DHN 2010-07-13 15:57:03
剛剛遇到這個 - 我也試圖實現這一點。此解決方案是否不在ResourceDictionary中創建每個項目的新實例?或者是WPF足夠聰明地認識到它已經被加載,並且只使用一組值? – Ross 2011-06-17 11:48:13
Visual Studio 2015和2017在設計模式中引發錯誤: 無法投射類型爲'OnDemandResourceDictionary'的對象以鍵入'Microsoft.VisualStudio.DesignTools.Markup.DocumentModel.DocumentCompositeNode'。如何擊敗它? – yatskovsky 2017-04-03 11:47:35