4

WinRT アプリをグローバル化していますが、コンボボックスで言語リソースを使用できません。Textプロパティを使用して TextBlocks で使用できますが、 x:stringは使用できません。私は何を間違っていますか?

TextBlock x:Uid="Priority" Text="Default"></TextBlock>
<ComboBox>
     <x:String x:Uid="Color">Default1</x:String>
     <x:String x:Uid="Color.Text">Default2</x:String>
</ComboBox>

編集

XAML コードで ComboBox 要素にリソース文字列を設定できないのはなぜですか? ComboBox 内に TextBlock 要素を追加して辞書を使用したり、現在行っているようにコードを介してそれらをロードしたりできることは知っていますが、これは私の質問への回答ではありません。

4

3 に答える 3

4

私が知る限り、実行時に変更してリソースにバインドできないコンパイル時定数であるxamlで使用する場合。そのため、コンボボックスのアイテムとして Default1 または Default2 が表示される可能性があります。

あなたの問題の解決策を見つけることができました。

アイデアは、コンボボックスで ComboBoxItem を使用し、x:Uid をリソースの値に設定する必要があるということです。ただし、リソース ファイルでは、ComboBoxItem には TextBlock ではなく ContentPresenter がデフォルトで含まれているため、実際の名前は Name.Content である必要があります。

だから、これは私のために働いたコードです:私が持っているリソースファイルで:

Combo.Content        ComboBox1

そして、私が使用したXamlで:

<ComboBox>
   <ComboBoxItem x:Uid="Combo" />
</ComboBox>

これにより、ComboBox に項目 "ComboBox1" (リソース ファイルから) が入力されます。

これがさまざまな言語のリソース ファイルで機能するかどうかをテストしていませんが、機能しない理由はわかりません。

于 2013-03-04T18:06:38.423 に答える
1

自動リソースバインディングが機能するには、resource.reswのエントリがオブジェクトの(依存関係?)プロパティである必要があるのではないかと思います(ただし、ドキュメントに特定のステートメントは見つかりませんでした)。文字列にはそのようなプロパティはありません。たとえばDefault1、の値ではありません。String.Content

抵抗が最も少ないパスは、ComboBox要素にTextBlockを使用することです。または、リソースをコードでロードし、その方法で文字列に割り当てることもできます。

于 2013-02-24T15:31:22.053 に答える
0

ComboBox の ItemsSource のバインディングを使用することを妨げているものはありますか? そうすれば、必要な情報を含むカスタム オブジェクトとDisplayNameプロパティを使用して、.resx ファイルから正しいリソース文字列を取得できます。

それがまったく選択肢ではない場合、XAML ですべてを完全に行うための解決策がどうなるか、今のところわかりません。

于 2013-03-04T11:53:56.790 に答える