2009-05-10 11 views
11

Silverlight 2/C#を初めて習得しようとしています。Silverlightでxamlとc#の間の数値定数を共有する方法

数値定数(または読み込み専用の変数)を宣言し、XAMLとC#コードビハインドファイルの両方にアクセスする必要があります。

これらの値はXAMLでより適切に定義されますが、C#で定義する必要がある場合は、複数の場所で値をハードコーディングするよりも優れています。

私はWPF XAMLの解決策を見つけましたが、Silverlightは構文をサポートしていないようです(そして、C#ファイルに定義が必要であることが判明しました)。

TIA!コメントの編集は、私はこれだけのテキストを追加することはできませんし、私が応答する別の方法を見つけることができなかったので、私は私の元の質問にコメントとしてこの応答を追加しているマイケル・

返信あなたの答えに。

答えをくれてありがとう、マイケルが、私はそれを働かせることができないようです。

「Pro Silverlight 2 in c#2008」の例から始めます。 この例はうまくいきますが、私のXAMLの2つの場所とC#の1つの場所で同じ2つの値をハードコードする必要があります。

私はあなたのソリューションを実装しましたが、すべてうまく構築されましたが、コードを実行しようとしたときにブラウザでページエラーが発生しました。私はすべての変更を取り除き、物事がもう一度うまく走ったことを確認しました。

次に、xmlns:sys宣言とsys:Int32宣言をApp.xamlファイルに追加しました。 VS2008でPage.xamlファイルを表示しようとすると、奇妙なエラーが発生しました。

未宣言プレフィックス[行番号:6位置:30] - Page.xmal、Line 1、Column 1

プレビューページが空白でした。そこライン6、Page.xamlをのコル30に興味深い何もなかったが、App.xamlファイルで、その場所は「>」閉鎖を含んで

すぐに整数値8の前に:

<sys:Int32 x:Key="QAPS">8</sys:Int32> 

の場合私はF5を押すと、しかし、アプリはブラウザで正常に動作します。

私はVS2008 SP1とMar 09 Silverlightツールキットを実行しています。

特にApp.xamlアプリケーションリソースセクションのQAPS宣言が原因である可能性があります。特に、アプリケーション内のどこにも参照していないため、私は理解できません。あなたは何が起こっているのか考えていますか?

あなたが正しいなら、マイケル

に別の返信、私はのxmlnsを追加していなかった。私のPage.xamlをするsysの宣言を、それは何の違いを作っていない追加 - 私はまだ「宣言されていないを取得していますプレフィックス[行:6位置:30] 'Page.xamlでエラーが発生します(アプリケーションはまだ実行されています)。すべてが正常に実行されるので、これはVS2008の問題でなければならないと思います。

大きな問題は、C#からQAPSにアクセスしようとしたときにランタイム例外が発生していたことでした。私はそれが原因で間違っていたことを理解しました。問題は、リソースが存在する前に明らかにリソースにアクセスしていたことでした。

クラスレベルでリソース値を保持するプライベート変数を宣言/初期化しました。初期化をイベントハンドラに移したときに問題は解決しました。だから私は、XAMLリソースが作成される前にC#クラスレベルの変数が評価されていると推測しています。

(コメントの600文字の制限は本当の苦痛です。そのままですが、元の質問を編集して返信する必要があります)。

+0

よう

if (Application.Current.Resources.Contains("QPS")) { int callsPerSecond = (int) Application.Current.Resources["QPS"]; } 

とXAMLを介しましたあなたのPage.xamlのようなXAMLの外観。 おそらく、page.xamlのxmlns:sys名前空間宣言が省略されています。 –

答えて

19

アプリケーションまたはページのリソースに入れて:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <Application.Resources> 
     <sys:Int32 x:Key="QPS">8</sys:Int32> 
    </Application.Resources> 
</Application> 

その後、あなたはこのようなコードを経由してアクセスすることができます。何この

<TextBlock Text="{StaticResource QPS}"/> 
+0

XAML 2009では、リソース定義は ' 8'となります。これは、Windows 8およびWindows Phone 8.1に適用されます。 http://msdn.microsoft.com/en-us/library/ee792002(v=vs.110).aspxを参照してください。 – danhbear