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对象中的值。{StaticResource ....}这常常让开发人员感到意外,因为在 xaml 中使用时会发生这种情况。

我猜你所包含的代码是在一个UserControl因此找到“GridValueStyle”的,它必须专门在用户控件的资源中。如果它在子资源中(例如<Grid.Resources>常见的“LayoutRoot”的资源),则找不到,如果在App.Xaml中也找不到。

于 2011-07-26T20:26:54.993 回答