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

Я хочу заменить часть пути исходного пути константой c # для более простого управления путями, например, у меня есть:

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

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

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

Я хочу иметь что-то вроде:

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

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

Ответы [ 3 ]

18 голосов
/ 13 марта 2010

Самый простой способ сделать это с помощью 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 голосов
/ 13 марта 2010

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

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

2 голосов
/ 13 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...