19

XAML で浮動小数点値を直接指定し、それをいくつかの UI ピースのリソースとして使用すると非常に便利な状況に遭遇しました。いろいろと調べてみると、適切なアセンブリ (mscorlib) を XAML に含める方法について、かなりの量の情報が見つかりました。

残念ながら、これを行おうとすると例外が発生します。状況を再現する次の XAML を次に示します。

<Window x:Class="davidtestapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:core="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <core:Double x:Key="MyDouble">120</core:Double>
</Window.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{StaticResource MyDouble}" />
        <ColumnDefinition Width="40" />
        <ColumnDefinition Width="40" />
    </Grid.ColumnDefinitions>

    <Rectangle Grid.Column="0" Fill="Red" />
    <Rectangle Grid.Column="1" Fill="Green" />
    <Rectangle Grid.Column="2" Fill="Blue" />

</Grid>
</Window>

これをコンパイルして実行しようとすると、「'120' はプロパティ 'Width' の有効な値ではありません」という XamlParseException がスローされます。

しかし、「Width」プロパティdouble なので、定義された StaticResource を使用して設定できないのはなぜですか? 誰もこれを行う方法を知っていますか?

4

2 に答える 2

30

いいえ、ColumnDefinition.Width は GridLength 型であるため、エラーが発生します。以下のコードのようにすれば、うまくいくはずです。

<Window.Resources>
    <core:Double x:Key="MyDouble">300</core:Double>
    <GridLength x:Key="MyGridLength">20</GridLength>
</Window.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{StaticResource MyGridLength}" />
        <ColumnDefinition Width="40" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <Rectangle Grid.Column="0" Fill="Red" />
    <Rectangle Grid.Column="1" Fill="Green" />
    <Rectangle Grid.Column="2" Fill="Blue"  Width="{StaticResource MyDouble}"/>

</Grid>
于 2010-09-09T20:18:04.790 に答える
3

発生している問題は、ColumnDefinition オブジェクトで、Width プロパティがdouble ではなく、 GridLength構造であることです。ColumnDefinition.WidthのMSDN ドキュメントを見ると、ColumnDefinition.Width に double を割り当てることができないことがわかります。

于 2010-09-09T20:21:39.327 に答える