У меня есть несколько строк ресурсов для разных языков. Как вы можете видеть, все они начинаются с заглавной буквы, а затем в нижнем регистре. Итак, есть ли способ конвертировать все из них в UPPERCASE без прямого изменения ресурсов? Можно ли это сделать в XAML? Может быть, сочетание конвертера Binding?Ресурсы с конвертером Binding
ответ
Вот C# версии одного и того же:
public class ToUpperConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
string stringValue = value as string;
return string.IsNullOrEmpty(stringValue) ? string.Empty : stringValue.ToUpper();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotSupportedException();
}
}
Для ссылки это в XAML:
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1">
<Page.Resources>
<local:ToUpperConverter x:Key="UpperCaseConverter" />
</Page.Resources>
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text="{x:Bind MyString, Converter={StaticResource UpperCaseConverter}}" />
</StackPanel>
</Page>
Для полноты это свойство я x:Bind
к:
public sealed partial class MainPage
{
public string MyString => "Hello world!";
public MainPage()
{
InitializeComponent();
}
}
EDIT
В комментариях ОП, @RaamakrishnanA спрашивает, как это может работать с ресурсами. Немного косвенности - это один подход.
В файле .resw
, обеспечивает значение для Tag
собственности:
<data name="HelloWorld.Tag">
<value>Hello, world!</value>
</data>
Теперь использовать x:Uid
, чтобы связать это с Tag
свойства TextBlock
, затем связать Text
свойства тега, что позволяет нам использовать преобразователь:
<TextBlock
x:Name="textBlock"
x:Uid="HelloWorld"
Text="{Binding Tag, ElementName=textBlock, Converter={StaticResource UpperCaseConverter}}"
/>
Выход:
Благодарим вас за подробный ответ! На самом деле, я немного расстроен тем, что он не может быть проклят через XAML, но вы дали мне хороший обходной путь) –
Вы сказали Ответ на этот вопрос самостоятельно. Используйте конвертер.
Public Namespace Converter
Public Class ToUpperValueConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object
Dim str = TryCast(value, String)
Return If(String.IsNullOrEmpty(str), String.Empty, str.ToUpper())
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object
Return Nothing
End Function
End Class
Редактировать
Чтобы использовать этот конвертер вам нужно использовать какое-то привязку к вашей собственности, а не обычному x:Uid
пути. Вы не можете напрямую привязываться к ресурсу. Вместо этого вам нужно преобразовать ресурс в какую-то форму кода и привязать его через ViewModel. Этот SO answer проведет вас по ступеням. Но вместо инструмента PublicResXFileCodeGenerator
вам, возможно, придется использовать что-то вроде ResW File Code Generator
Я боюсь, что в чистом XAML нет никакого способа сделать это.
Уважаемый @Raamakrishnan A., я знаю, как написать конвертер для инструкции привязки, но не могли бы вы предоставить некоторую реализацию этого в XAML? Например, у меня есть
@ КонстантинЧербаков. Я изменил свой ответ соответственно. Надеюсь, это поможет вам –
- 1. WPF ComboBox Binding с конвертером
- 2. WPF binding ObservableCollection с конвертером
- 3. C# WPF Binding Path Data с конвертером
- 4. Binding ObservableCollection <string> с конвертером
- 5. Связывание с конвертером
- 6. (WPF) Binding OneWayToSource с конвертером приводит к немедленному исключению
- 7. Проблема с конвертером XmlDataProvider
- 8. UpdateSourceTrigger не работает с конвертером
- 9. Как связать с StaticResource с конвертером?
- 10. Проблемы с конвертером C#
- 11. SelectOnMenu с конвертером
- 12. Можно ли условно определить SortMemberPath с конвертером?
- 13. связывание изображения с 2 значений с конвертером
- 14. Проблемы с блокировкой текстового блока с конвертером
- 15. Сортировка datagrid WPF для перечисления с конвертером
- 16. Связывание с ComboBox с конвертером в Silverlight
- 17. Привязка к статическому ресурсу с конвертером
- 18. Как использовать Prettyfaces с конвертером?
- 19. WP7 UserControl с условным конвертером?
- 20. WPF привязка от System.Windows.SystemParameters.PrimaryScreenWidth с конвертером
- 21. WPF Связывание без пути с конвертером, обновление
- 22. Как объявить видимость с привязкой и конвертером в стиле
- 23. Как связать свойство возвращаемого конвертером объекта
- 24. Как установить SystemColors.HighlightBrushKey в WPF с конвертером
- 25. Связывание «BindingList» с DataTemplate с конвертером не обновляется
- 26. Использование POJO с SelectOneMenu с общим конвертером
- 27. WPF - привязка строки с конвертером, который возвращает строку
- 28. Как связать наблюдаемую коллекцию с холстом с конвертером
- 29. Коллекция анонимных типов с использованием datagrid с конвертером
- 30. Формат строки XAML в многосвязном режиме с конвертером
Эй, @ Константин, мне просто интересно. Могли ли вы получить доступ к своим файлам resx/resw (я думаю, это то, где у вас есть ваши строки) через ответ Петтера? –
@RaamakrishnanA: Это сообщение может вас заинтересовать: http://stackoverflow.com/a/40789743/3968276 –