2

私が行ったことは、この記事に基づいています:http: //msdn.microsoft.com/en-us/library/aa348547.aspx

app.xamlにロードされているマージされた辞書から文字列を取得しようとしています。コードビハインドファイルではないクラスからこれを実行しようとしています。ページ要素はStyles.xamlファイルに含まれているスタイルのxamlマークアップからスタイル設定されているため、原則としてリソースファイルを読み込むことができます。

app.xamlファイル

<Application
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
  x:Class="theApp.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Assets/Styles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

styles.xamlファイル(簡単にするために編集)

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
     xmlns:clr="clr-namespace:System;assembly=mscorlib">

    <clr:String x:Key="applicationName">TheKraken</clr:String>
</ResourceDictionary>

リソースにアクセスするために使用しているコード行

string appName = (string)App.Current.Resources["applicationName"];

私が欠けているものはありますか?

4

1 に答える 1

1

このコードの本当の問題は、コード自体ではありません。

リソースを割り当てている変数は、linqwhere句の一部として使用されます。

今日は3人で頭をかいていたので、信じられないでしょう。状況は次のとおりです。app.Current.Resourcesが空ではないという前提条件を保証する一連の契約ステートメントがあります-これらはすべて合格です

奇妙さを示すために、リソースを2つの別々の文字列に割り当てます。1つはlinqwhere句で使用され、もう1つはリソースから文字列をプルすることが実際に機能することを示すためにあります。where句にある文字列はnullであり、null以外に設定することはできません。もう1つの文字列には、期待どおりのデータが含まれています。両方の文字列は、precisleyを使用して同じコードに割り当てられます。さらに奇妙なことに、文字列を初期化して「john」と言い、リソースデータをそれに割り当てて、これをlinqで使用すると、文字列に「john」を割り当てると、文字列もnullになります。linqはその時点でXElementに取り組んでいました。

string test = "John";
test =  (string)App.Current.Resources["applicationName"];
var results = from ........
              where x == test
              select something

これにより、テストがjohnに設定されませんでした。つまり、問題のコードが割り当てに影響を与えた後のlinqです。

この問題の修正は、linqを別のrmethodに移動することでした。その後、すべてが正常に動作しました。なぜこれが起こったのか、私には少しも手がかりがありません。

でも知りたいです。新しいプロジェクトでそれを再作成し、それをマイクロソフトtbhに送信したいという誘惑に駆られます。しかし、明白で合理的な説明があることを望んでいます。

于 2010-09-30T15:13:41.433 に答える