исключение динамической загрузки изображения wpf - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь загрузить изображение с моего жесткого диска (не из папки проекта) динамически.Когда я жестко кодирую путь, изображение загружается просто отлично:

<Border>
    <Border.Background>
        <ImageBrush ImageSource="C:\Program Files\my program\Working Assets\Logos\background.jpg" />
    </Border.Background>

Однако, когда я пытаюсь загрузить изображение динамически, путь не может быть найден.

c # file:

public static string BACKGROUND_IMAGE_PATH = "C:\\Program Files\\my program\\Working Assets\\Logos\\background.jpg"; 

xaml:

xmlns: localVariables = "clr-namespace: my_namespace.StaticResources">

     <Border BorderBrush="{Binding ColorsBo.BorderColor, FallbackValue='Black'}">
            <Border.Background>
                <ImageBrush ImageSource="{x:Static localVariables:VC.BACKGROUND_IMAGE_PATH}" />
            </Border.Background>

КогдаЯ просматриваю логи и копирую путь, который, по словам компилятора, он не может найти, он ведет меня непосредственно к ресурсу.Кто-нибудь знает, почему не удается найти ресурс, когда я пытаюсь загрузить его динамически?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Попробуйте:

<ImageBrush ImageSource="{Binding Source={x:Static localVariables:VC.BACKGROUND_IMAGE_PATH}}" /> 

Объяснение см. В разделе «Примечания» в x: расширение статической разметки :

Будьте осторожныкогда вы делаете x: статические ссылки, которые не являются непосредственно типом значения свойства.В последовательности обработки XAML предоставленные значения из расширения разметки не вызывают дополнительное преобразование значений.Это верно, даже если ваша ссылка x: Static создает текстовую строку, и преобразование значений для значений атрибутов, основанных на текстовой строке, обычно происходит либо для этого конкретного члена, либо для любых значений членов возвращаемого типа.

В отличие от вышеизложенного, встроенное автоматическое преобразование типов (например, из строки в ImageSource) применяется к значению, создаваемому привязкой.

0 голосов
/ 18 февраля 2019

ImageBrush.ImageSource не требует строки для этой работы, вам нужно создать новый ImageSource

public static ImageSource BACKGROUND_IMAGE_PATH = new BitmapImage(new Uri("C:\\Program Files\\my program\\Working Assets\\Logos\\background.jpg"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...