2009-08-14 17 views
3

私のコントロールの1つのwidthプロパティをqualifiedDoubleに設定しようとしています。
as described here on MSDNです。
(qualifiedDoubleの使用上のMSDNの情報を見るために、「XAML値」セクションまでスクロール)FrameworkElement.WidthプロパティをコードビハインドのqualifiedDoubleの値に設定するにはどうすればよいですか?

はしかし、私はむしろXAMLよりも、コードビハインドでこれを達成する方法を知りたいです。私が作成しているUserControlには継承の目的でXAMLが添付されていません。だから、私はC#でできることを使って、手動ですべてのXAML操作を実行する必要があります。

コードビハインドでqualifiedDoubleがどのように達成されたかを知っている人はいますか?

+0

私の答えをもう少し詳しく編集し、その "10px"ものを編集しました。 –

答えて

5

偶然にも、私は今日これをやらなければなりませんでした。修飾されたダブルスは、あなたがそれを与えるユニットに基づいて、しかしLengthConverterの一部として因子変換を経ることになります。

LengthConverter lc = new LengthConverter(); 
string qualifiedDouble = "10pt"; 

double converted = lc.ConvertFrom(qualifiedDouble); 

代替:

double original = 10.0; 
double converted = original * 1.333333333; // px-to-pt conversion 

これは、例えば、13.3333333に "10ptの" を変換します。記事で提供されている換算係数を使用することもできますが、因子がクラスに組み込まれているため、上記を使用することをお勧めします。

編集:文字列についてのコメントに反応してを...

文字列変換は、それがために意図されたもののために完璧な理にかなっています。 XAMLではC#やVBよりもXAMLで表現する方がはるかに簡単なので、XAMLを使用します。 XAMLでは、すべての値が文字列なので、文字列をターゲットタイプに変換するために自動的に選択されたのはTypeConverterです。たとえばFontSizeConverterは、LengthConverterの内部静的メソッドを呼び出します。 (代わりにFontSizeConverterをインスタンス化することもできます)GridLengthの場合は「4 *」、Widthの場合は「自動」のようなコンバーターもあります。または、私が言ったように、あなたは文字列なしで変換する独自のクラスを作成することができます。

This articleは、コードビハインドのために因子を直接使用することを推奨しているので、私は上記の別の例を提供しました。

+0

これは意味があります。私はそれがランタイム文字列変換であることに少し失望していますが。 Microsoftは文字列にあまりにも依存していると私は思う。 – Giffyguy

+0

ああ、それは意味があります。彼らはあなたが文字列を持つ牛肉を持っている場合、あなた自身が変換を実行することを望みます。文字列変換に関する私の特に問題はパフォーマンスです。アプリ内では何千もの変換が起こり、遅れることは許されません。だから、マイクロソフトの明白な解決策は、私を最も恩恵を受ける方法でそれを自分自身で行うことです。 – Giffyguy

関連する問題