我正在尝试将图像源绑定到字符串。我已经尝试了通过谷歌搜索找到的所有内容,但仍然无法正常工作。 我的方案是,我的项目中有一个Icon文件夹,里面有一些图标。我正在使用像这样的项目控件
<ItemsControl ItemsSource="{Binding Options}" ItemTemplate="{StaticResource subOptions}" VerticalContentAlignment="Top" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
现在我的数据模板看起来像这样
<DataTemplate x:Key="subOptions">
<StackPanel>
<TextBlock Text="{Binding Title}" Foreground="White" FontSize="32" Margin="20,10,0,0" Name="TitleTexBlock"/>
<Border Width="530" Margin="20,10,0,0" Height="200">
<!--<Image Source="{Binding IconSource, Converter={StaticResource convertStringToImage}}" Width="100" Height="100"/>-->
<Image Source="{Binding ImageSource}" Width="100" Height="100"/>
<!--<TextBlock Text="{Binding ImageSource}" FontSize="30"/>-->
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=TitleTexBlock,Path=Text}" Value="Defaults">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="Background" Value="DarkRed"/>
</Style>
</Border.Style>
</Border>
<ListBox ItemsSource="{Binding Suboptions}" SelectedItem="{Binding ElementName=Options,Path=DataContext.SelectedSuboption}" ItemTemplate="{StaticResource Inside}" Padding="10,10,10,10" Margin="20,0,0,0" BorderThickness="0">
<ListBox.Resources>
<Style TargetType="ListBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Title}" Value="Defaults">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="Background" Value="DarkRed"/>
</Style>
</ListBox.Resources>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="LightGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
</DataTemplate>
现在注释掉的图像正在使用此转换器
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return new BitmapImage(new Uri(value.ToString(), UriKind.RelativeOrAbsolute));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
转换器的价值来自此处
public class Option
{
public string Title { get; set; }
private string iconSource = "/Icons/";
//private string iconSource = "pack://application:,,,MoveA2Options;components/Icons/";
public string IconSource
{
get { return iconSource; }
set
{
iconSource = iconSource + value;
iconSource += ".png";
}
}
我知道创建的路径是正确的,因为我尝试使用在Xaml中注释掉的Texblock并显示正确的路径。 我也试过这种方法
public class Option
{
public string Title { get; set; }
private string iconSource = "/Icons/";
//private string iconSource = "pack://application:,,,MoveA2Options;components/Icons/";
public string IconSource
{
get { return iconSource; }
set
{
iconSource = iconSource + value;
iconSource += ".png";
imageSource = new BitmapImage(new Uri((iconSource), UriKind.RelativeOrAbsolute));
}
}
private ImageSource imageSource;
public ImageSource ImageSource
{
get { return imageSource; }
set { imageSource = value; }
}
因此,在这种方法中,不使用转换器,文本块再次显示图像的路径是正确的。但图像要么没有显示,要么我得到一些输出异常。 使用这样的任何图像
<Image Source="pack://application:,,,MoveA2Options;components/Icons/CrateHire.png"></Image>
或者这个
<Image Source="/Icons/CrateHire.png"></Image>
完美无缺,任何我可以尝试解决的想法?处理的DataTemplate中的图像是否与网格中的图像不同?
亲切的问候
答案 0 :(得分:1)
我在我的情况中找到的唯一解决方案是修改此行
private string iconSource = "/Icons/";
到这个
private string iconSource = "../Icons/";