在Metro App中动态绑定图像

时间:2012-12-04 04:15:09

标签: c# xaml microsoft-metro

我在ImageBrush中有一个ImageSource,它会根据我的数据动态改变。

问题是,我无法直接访问ImageBrush的名称,因为它在DataTemplate中。我知道这是个坏主意,因为在UI中存储数据是一个坏习惯。

如果有人知道如何使用Image上的数据绑定解决这个问题,我真的很感激。 谢谢!

<DataTemplate>
  <StackPanel Width="250" Height="180" VerticalAlignment="Bottom">
    <StackPanel.Background>
       <ImageBrush ImageSource="{Binding ???}"/>
    </StackPanel.Background>
    ........
  </StackPanel>
</DataTemplate>

4 个答案:

答案 0 :(得分:2)

您可以创建一个将路径转换为图像的转换器:

public sealed class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            return new BitmapImage(new Uri((string)value));
        }
        catch 
        {
            return new BitmapImage();
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后在XAML中:

< Image Source="{Binding Path=ImagePath, Converter={StaticResource ImageConverter}}" />

答案 1 :(得分:0)

试试这个:

<Image> 
    <Image.Source> 
        <BitmapImage UriSource=”{Binding ImagePath}” /> 
   </Image.Source> 
</Image> 

答案 2 :(得分:0)

为什么不使用属性并将控件绑定到属性!!! 您可以将图像的路径设置为属性,然后将元素绑定到属性

答案 3 :(得分:0)

您需要在BaseUri

中指定new Uri(BaseUri, Url)
public sealed class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            return new BitmapImage(new Uri(BaseUri, (string)value));
        }
        catch 
        {
            return new BitmapImage();
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

同时在XAML代码中指定转换器

<Page:Resources>
     <local:ImageConverter x:Key="imageConverter"/>
</Page:Resources>

转换器位于Image

<Image Source="{Binding Path=ImagePath, Converter={StaticResource imageConverter}}" />