Содержимое пользовательской кнопки Silverlight - PullRequest
1 голос
/ 23 июня 2011

Что было бы хорошим способом настройки текста (содержимого) кнопок для каждого клиента в приложении SL 4? Я все еще довольно новичок с SL, так что это может показаться тривиальным.

Проблема не нова. В настоящее время система имеет статический атрибут XAML для содержимого ButtonA как «Do Stuff» (Content = «DoStuff»). Теперь один клиент хочет, чтобы читать «Делай вещи». Это будет иногда появляться в произвольных местах по всей системе.

У меня есть доступный словарь, который будет содержать пользовательский текст, но хотел бы, чтобы (если это возможно) иметь возможность иметь значение по умолчанию и переопределять только , если есть запись словаря.

Концептуально было бы неплохо иметь возможность:

<Button Content="Do Stuff" OverrideContentKey="ButtonAOverrideContent" />

где, если в словаре есть ключ ButtonAOverrideContent, он будет переопределять его, но в противном случае будет отображаться «Do Stuff».

Есть ли способ написать конвертер и сделать несколько записей в App.xaml, которые позволили бы всем кнопкам условно переопределять содержимое? То, что я видел в конвертерах, похоже, что нет гладкого способа передать им информацию об элементе управления (например, ключ переопределения).

1 Ответ

2 голосов
/ 23 июня 2011

Вы можете использовать ConverterParameter свойство Binding для передачи вашего ключа содержимого переопределения конвертеру.

public class ReplaceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string key = (string)parameter;
        var someDictionary = GetYourReplacementDictionary();
        if (someDictionary.ContainsKey(key))
        {
            return someDictionary[key];
        }
        else
        {
            return value;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

В ваших ресурсах App.Xaml: -

 <local:ReplaceConverter x:Key="replacer" />

Затем на кнопке: -

 <Button Content="{Binding Source='Do Stuff', ConverterParameter=ButtonAOverrideContent, Converter={StaticResource replacer}}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...