Expression Blend, ItemTemplate и неявный стиль - PullRequest
4 голосов
/ 27 мая 2011

У меня проблема с тем, что Blend не отображает элементы в простоте стиля DataTemplate.

Я настроил базовый проект, чтобы повторить проблему.Ниже Xaml + ResourceDictionary для тех, у кого глаза Eagle, чтобы увидеть, что я делаю неправильно (если что), и, если вы действительно заинтересованы, есть ссылка на проект Zipped ниже.

Это то, что отображается, когдаприложение запускается:

Expected Output

, и это то, что представляет Blend:

Blend Rendered

<Color x:Key="TextColor1">#FF3631C4</Color>

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="TextWrapping" Value="NoWrap"/>
    <Setter Property="TextTrimming" Value="None"/>
    <Setter Property="Foreground">
        <Setter.Value>
            <SolidColorBrush Color="{DynamicResource TextColor1}"/>
        </Setter.Value>
    </Setter>
</Style>

<Canvas x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}">
    <TextBlock Text="Textblock" Canvas.Left="44.954" Canvas.Top="49.305" />
    <TextBlock Text="Textblock 2" Canvas.Left="44.954" Canvas.Top="86.284" />
    <ListBox ItemsSource="{Binding Collection}" Canvas.Left="134.016" Canvas.Top="29.026" Height="154.275" Width="384.575">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Property1}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Canvas>

Полный пример проекта (65 КБ) - WpfApplication2.zip

Проблема, конечно, может бытьрешается путем точной установки стиля, но в моем основном проекте это вызовет небольшую головную боль.

Я видел некоторые комментарии к другим постам о том, что Blend может иметь проблемы, но ничего конкретного.

Есть какие-нибудь мысли / предложения?

Спасибо!

Редактировать:

Я обнаружил, что если я даю своему стилю Явный ключ, я могу затем создать неявный стиль на основеОткровенный, например, так:

<Style x:Key="TextBlockStyle1" TargetType="{x:Type TextBlock}">
    <Setter Property="TextWrapping" Value="NoWrap"/>
    <Setter Property="TextTrimming" Value="None"/>
    <Setter Property="Foreground">
        <Setter.Value>
            <SolidColorBrush Color="{DynamicResource TextColor1}"/>
        </Setter.Value>
    </Setter>
</Style>

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStyle1}" />

Это дает мне возможность добавить еще один неявный стиль.в качестве ресурса в моем DataTemplate:

<DataTemplate>
    <DataTemplate.Resources>
        <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStyle1}"></Style> 
    </DataTemplate.Resources>
    <TextBlock Text="{Binding Property1}" />
</DataTemplate>

Это даст мне возможность смешивания, которая мне понадобится в моем основном проекте, но все еще не вполне отвечает на мой первоначальный вопрос.

1 Ответ

1 голос
/ 10 ноября 2011

Во-первых, Blend написан на WPF и XAML. Таким образом, у Blend есть свой собственный стиль приложения, и поскольку ваше приложение также определяет глобальные стили, чтобы не объединять их, оно будет применять их по-другому, и, вероятно, существует ошибка в методе, который они использовали для применения этих стилей.

Это мое предположение, почему это происходит. Это не решает проблему, но может помочь вам найти другие обходные пути.

...