Подтвердить что ты не робот

В WPF XAML как я могу конкатенировать 2 константы, чтобы я мог использовать заранее определенные пути?

Я новичок в XAML, поэтому предположим, что мне не хватает чего-то простого. Я хочу заменить часть пути исходного пути константой С# для более простого управления трафиком, например, у меня есть:

<Image Source="/Images/Themes/Buttons/MyPicture.png" />

а в другом классе я определил константу:

public static readonly string UriImagesButtons = "/Images/Big/PNG/";

Я хочу иметь что-то по строкам:

<Image Source="{static:UriImagesButtons + MyPicture.png}" />

Это означает, что я могу изменить путь по всему миру с ударом, если возникнет такая необходимость. Каков синтаксис для этого?

4b9b3361

Ответ 1

Самый простой способ сделать это - с помощью MultiBinding с StringFormat:

<Path>
    <Path.Source>
        <MultiBinding StringFormat="{}{0}{1}">
            <Binding Mode="OneTime" Source="{x:Static lcl:ConstantOwner.UriImagesButtons}" />
            <Binding Mode="OneTime" Source="MyPicture.png" />
        </MultiBinding>
    </Path.Source>
</Path>

В параметре StringFormat вам нужно избежать первой фигурной скобки с помощью "{}", поэтому анализатор XAML не считает, что это расширение разметки.

Ответ 2

Замена пути означает, что вам нужно выполнить привязку данных... Итак, почему бы вам не сохранить в своем классе С# полный путь к файлу и связать с ним?

Ответ 3

Вы должны посмотреть обсуждение этой темы: строковая манипуляция в атрибуте xaml

В принципе, вы можете создать собственное расширение разметки, которое принимает 2 параметра и объединяет их. Этот конкретный пример также используется для привязки. Я подозреваю, что вы хотели бы иметь возможность привязываться к тому, где определен корневой путь или какие-то другие данные.