2016-06-02 2 views
1

У меня есть несколько строк ресурсов для разных языков. Как вы можете видеть, все они начинаются с заглавной буквы, а затем в нижнем регистре. Итак, есть ли способ конвертировать все из них в UPPERCASE без прямого изменения ресурсов? Можно ли это сделать в XAML? Может быть, сочетание конвертера Binding?Ресурсы с конвертером Binding

enter image description here

+0

Эй, @ Константин, мне просто интересно. Могли ли вы получить доступ к своим файлам resx/resw (я думаю, это то, где у вас есть ваши строки) через ответ Петтера? –

+0

@RaamakrishnanA: Это сообщение может вас заинтересовать: http://stackoverflow.com/a/40789743/3968276 –

ответ

0

Вот 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}}" 
/> 

Выход:

enter image description here

+0

Благодарим вас за подробный ответ! На самом деле, я немного расстроен тем, что он не может быть проклят через XAML, но вы дали мне хороший обходной путь) –

0

Вы сказали Ответ на этот вопрос самостоятельно. Используйте конвертер.

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 нет никакого способа сделать это.

+0

Уважаемый @Raamakrishnan A., я знаю, как написать конвертер для инструкции привязки, но не могли бы вы предоставить некоторую реализацию этого в XAML? Например, у меня есть , так как я могу отформатировать ресурс, который был взят из файла .resx? –

+0

@ КонстантинЧербаков. Я изменил свой ответ соответственно. Надеюсь, это поможет вам –

Смежные вопросы