1

本当に助けが必要です。コード ビハインドでグリッド コントロールを動的に作成し、それを xaml で定義された包含コントロールの子に追加しています。現在、すべてが期待どおりに動的に作成されていますが、残念ながら同じ方法でスタイルを設定すると、グリッドに追加するテキストボックスのテキストを設定し、それに応じて行/列に配置すると機能しません。次のコードに注意してください。

        AddTextBlock(7, col, String.Format("{0:0}%", finances.PrivateDaysPercent), "GridValueStyle");


    TextBlock AddTextBlock( int row, int column, string text, string style)
    {
        Style s = Resources[style] as Style;
        TextBlock tb = new TextBlock() { Text = text};
        tb.Style = s;
        Grid.SetColumn(tb, column);
        Grid.SetRow(tb, row);
        grid.Children.Add(tb);
        return tb;
    }

    <Style x:Key="GridValueStyle" TargetType="TextBlock" BasedOn="{StaticResource ContentTextStyle}" >
        <Setter Property="Margin" Value="2,1" />
        <Setter Property="HorizontalAlignment" Value="Right"/>
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>

スタイルは明らかに設定されている必要がありますが、そうではありません。スタイルはリソース ディクショナリで正しく定義され、app.xaml に追加されます。別のナビゲーション ページでこのスタイルを使用し、xaml で静的に作成されたグリッドに完全に適用されるため、機能することはわかっています。

4

1 に答える 1

2

を使用Resources[style] するのは、その特定のResourceDictionary. style他のResourceDictionaryオブジェクトの値を探して要素のツリーを探し出すことはありません。が xaml で使用されたときに起こることなので、これは開発者を驚かせることがよくあります{StaticResource ....}

あなたが含めたコードは、UserControlしたがって、「GridValueStyle」が見つかるには、具体的には UserControl のリソースにある必要があると思います。子のリソース (<Grid.Resources>一般的な "LayoutRoot" など) にある場合は見つかりません。また、App.Xaml にある場合も見つかりません。

于 2011-07-26T20:26:54.993 に答える