Как выбрать строку от ресурса для присвоения в разделе WPF Resource в xaml

Теоретически SAPI может рассчитывать на это, но в большинстве случаев это не служит какой-либо цели, поэтому это не делается.

12
задан nmdr 20 March 2009 в 11:33
поделиться

5 ответов

Ни один из тех ответов не близко к тому, что Вы хотите. Я запустил бы путем чтения о Локализации в WPF. Вы найдете при выполнении локализации с WPF, желание x:Uid, определенного на каждом узле в приложении.

http://msdn.microsoft.com/en-us/library/ms788718.aspx

4
ответ дан 2 December 2019 в 02:53
поделиться

Создайте статический класс, который делает ресурсы доступными как свойства:

public static class Resources
{
   public string Resource
   {
      return Properties.Resources.ResourceManager.GetString("Resource");
   }
}

Затем можно связать TextBox с этим:

<TextBlock Text="{Binding Source={x:Static local:Resources}, Path=Resource}" x:Name="upArrowUsersHeader" HorizontalAlignment="Center"
   xmlns:local="clr-namespace:MY_NAMESPACE;assembly=MY_ASSEMBLY">
6
ответ дан 2 December 2019 в 02:53
поделиться

Я не знаю, может ли это быть сделано непосредственно в XAML, но если Вы пишете свой собственный класс обертки вокруг ResourceManager и используете его вместо этого. Заметьте, что класс наследовался TextBlock:

public class ResourceContentTextBlock : TextBlock
{
    public string ResourceName 
    {
        set
        {
            this.Text = Properties.Resources.ResourceManager.GetString(value);
        }
    }
}

Можно затем использовать ResourceContentTextBlock в XAML где угодно, Вы иначе использовали бы TextBlock:

<Window x:Class="WpfApplication3.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:client="clr-namespace:WpfApplication3" 
    >
        <client:ResourceContentTextBlock ResourceName="String1" />
</Window>
1
ответ дан 2 December 2019 в 02:53
поделиться

Еще два дополнительных пункта, о которых я забыл упомянуть выше в "Я смог это сделать...":

  1. Вам не нужно обертывать объект Properties.Resources в свой собственный. Вы можете получить прямой доступ к нему, как я сделал это в моем примере выше. Я думаю, что обертывание объекта - это способ получить тот же результат, о котором я говорил во 2-м пункте.
  2. По умолчанию, файлы ресурсов собираются с помощью "ResXFileCodeGenerator". Это делает их внутренними, когда он генерирует файл кода, так что xaml не может получить к нему доступ. Вы должны изменить это на "PublicResXFileCodeGenerator", который генерирует публичные классы. Вы можете изменить это, щелкнув по файлу ресурса в проводнике решений и отредактировав свойство "Custom Tool".

(извините, я не смог отредактировать вышеприведенный пост, потому что в то время был временным участником)

.
9
ответ дан 2 December 2019 в 02:53
поделиться

Я смог сделать это в программе с:

<TextBlock VerticalAlignment="Center" Margin="3"
           Text="{x:Static prop:Resources.OpenButton}"
           Visibility="{Binding Source={x:Static prop:Settings.Default}, Path=ShowButtonText, Converter={StaticResource BoolToVis}}"></TextBlock>

Мне также пришлось включить пространство имён .Properties в xaml, например:

xmlns:prop="clr-namespace:MyProjectNamespace.Properties"

Это позволило мне не только использовать строковые ресурсы, которые я определил для своего проекта для глобализации, но я также смог связать (в двух направлениях) с Настройками моего приложения. Это позволило мне очень легко запомнить положение окна, его размер и так далее. Как видите, используйте Settings. для настроек, а Resources. для ресурсов.

Как упоминал Стивен, я думаю, что "официальный" или "лучший" способ - это прикрепить x:Uid ко всему, что вы хотите глобализировать, но я этого не делал, и это сработало без проблем. Я думаю, что в основном x:Uid требуется, если вы используете автоматизированные инструменты или нарушаете задачу перевода, как это было бы в большом проекте. Я просто делал все свои собственные вещи вручную в VS, так что, может быть, все в порядке.

Бен

45
ответ дан 2 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: