4

Blend がアイテムを DataTemplate スタイルの暗黙的にレンダリングしないという問題があります。

問題を再現するための基本的なプロジェクトをセットアップしました。以下は、イーグルの目を持つ人が私が間違っていることを確認するための Xaml + ResourceDictionary です (もしあれば)。本当に熱心な場合は、以下の Zipped プロジェクトへのリンクがあります。

これは、アプリケーションの実行時にレンダリングされるものです。

期待される出力

そしてこれがBlendが提示するものです:

レンダリングされたブレンド

<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>

完全なサンプル プロジェクト (65kb) - WpfApplication2.zip

もちろん、この問題は明示的にスタイルを設定することで解決できますが、私の主なプロジェクトでは、これは少し頭痛の種になります。

その Blend に関する他の投稿でいくつかのコメントを見ましたが、問題があるかもしれませんが、具体的なものは何もありません。

ご意見/ご提案はありますか?

ありがとう!

編集:

スタイルに Explicit Key を指定すると、次のように Explicit に基づいて Implicit Style を作成できることがわかりました。

<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}" />

これにより、別の Implicit Style を Resource として DataTemplate に追加できるようになります。

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

これにより、メインのプロジェクトで必要なブレンド可能性が得られますが、元の質問にはまだ完全には答えていません.

4

1 に答える 1

1

まず Blend は WPF と XAML で書かれています。そのため、Blend には独自のアプリケーション スタイルがあり、アプリケーションはグローバル スタイルも定義しているため、それらをマージしないために異なる方法で適用され、それらのスタイルを適用するために使用された方法にバグがある可能性があります。

これがなぜこれが起こっているのか私の推測です。ただし、問題は解決しませんが、他の回避策を見つけるのに役立つ場合があります。

于 2011-11-10T01:01:34.970 に答える