В 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}" />
Это означает, что я могу изменить путь по всему миру с ударом, если возникнет такая необходимость. Каков синтаксис для этого?
Ответы
Ответ 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 параметра и объединяет их. Этот конкретный пример также используется для привязки. Я подозреваю, что вы хотели бы иметь возможность привязываться к тому, где определен корневой путь или какие-то другие данные.