Silverlight устанавливает стиль в коде позади Не работает :) Очевидное средство не работает! - PullRequest
1 голос
/ 26 июля 2011

Мне действительно нужна помощь.Я динамически создаю элемент управления grid в своем коде, а затем добавляю его к дочерним элементам содержащего элемент управления, который был определен в 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.

1 Ответ

2 голосов
/ 27 июля 2011

Следует отметить, что использование Resources[style] только пытается извлечь ключ из этого конкретного ResourceDictionary.Он не ищет дерево элементов, которое ищет значение style в других ResourceDictionary объектах.Это часто отнимает разработчиков неожиданно, поскольку именно так происходит, когда в xaml используется {StaticResource ....}.

Я думаю, код, который вы включили, находится в UserControl, поэтому для "GridValueStyle" необходимобыть конкретно в ресурсах UserControl.Если он находится в дочерних ресурсах (таких как <Grid.Resources> «LayoutRoot», который является общим), он не будет найден и не будет найден, если он находится в App.Xaml.

...