我目前正在使用以下代码构建一个带有标记图像和加拿大省名称的ComboBox
控件。但是图像没有显示在控件中。我已经测试了绑定并且它正确地生成了位置,但是图像不会出现在控件中。
不确定这里有什么问题不胜感激
代码:
<ComboBox x:Name="cb_Provinces" Text="Province"SelectionChanged="ComboBox_SelectionChanged" SelectedValuePath="ProvinceCode" ItemsSource="{Binding Provinces, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}">
<ComboBox.ItemTemplate>
<DataTemplate >
<StackPanel>
<StackPanel x:Name="stk_ComboTemplate" Orientation="Horizontal" HorizontalAlignment="Left">
<Image Width="25" Margin="10" Source="{Binding ProvinceCode, StringFormat=/CanadaTreeSvc.Interface;component/Resources/img/flags/\{0\}.gif}" />
<TextBlock Text="{Binding ProvinceName}"/>
</StackPanel>
<TextBlock FontSize="10" Foreground="Gray" Text="{Binding ProvinceCode, StringFormat=/CanadaTreeSvc.Interface;component/Resources/img/flags/\{0\}.gif}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
产生的结果:
答案 0 :(得分:3)
StringFormat
仅在目标类型为String
时才有效。
由于Image
Source
的类型为Uri
,因此StringFormat
Binding
最好的选择是让IValueConverter
格式化string
并将其返回Image
Source
属性。
示例:
public class ProvinceNameToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Format("/CanadaTreeSvc.Interface;component/Resources/img/flags/\{0\}.gif", value);
}
public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
用法:
<Window.Resources>
<local:ProvinceNameToImageSourceConverter x:Key="ImageConverter" />
</Window.Resources>
..................
<Image Source="{Binding ProvinceCode, Converter={StaticResource ImageConverter}}" />