Могу ли я установить базовый путь за пределами каталога моего приложения при привязке исходного пути изображения к относительному пути в WPF?

Итак, я пытаюсь отобразить изображение, которое находится вне пути моего приложения. У меня есть только относительный путь к изображению, такой как «images/background.png», но мои изображения находятся где-то еще, я мог бы выбрать это базовое местоположение во время выполнения, чтобы привязка сопоставлялась с нужной папкой. Например, "e:\data\images\background.png" или "e:\data\theme\images\background.png"

<Image Source="{Binding Path=ImagePathWithRelativePath}"/>

Есть ли способ указать в XAML или в коде базовый каталог для этих изображений?


person zimmer62    schedule 08.04.2010    source источник


Ответы (1)


Объявите статическое поле, скажем, BasePath в коде позади

class Utility
{
    public static BasePath;
}

назначьте ему путь, который вы хотите использовать в качестве базового пути

объявите конвертер следующим образом:

public class RelativePathToAbsolutePathConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //conbine the value with base path and return
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        // return whatever you want
    }
}

Обновите привязку, чтобы использовать конвертер

<Window.Resources>
<local:RelativePathToAbsolutePathConverter x:Key="RelativePathToAbsolutePathConverter"/>
</Window.Resources>

<Image Source="{Binding Path=ImagePathWithRelativePath, Converter={StaticResource RelativePathToAbsolutePathConverter}}"/>
person viky    schedule 09.04.2010
comment
Спасибо, что указали мне правильное направление. Оказывается, мне нужно объединить путь и относительный путь в методе Convert, а не в методе ConvertBack. Я все еще отмечаю это правильно, так как это решило мою проблему. Я подумал, что мне может понадобиться конвертер, и просто подумал, что может быть другое решение... в любом случае... Спасибо! - person zimmer62; 09.04.2010
comment
это было потому, что я не проверял свой код, в любом случае, спасибо, что указали на мою ошибку, я обновил свой ответ - person viky; 09.04.2010