app.xamlのdataTemplateは、スタイルなしでピックアップされていませんか?

StackOverflow https://stackoverflow.com/questions/4813488

質問

ViewModelのビューをバインドするapp.xamlにdataTemplateがあります。

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
</Application.Resources>

スタイルがない場合、上記のテンプレートは適用されません。スタイルを置いた瞬間、ようなもの...

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="20"></Setter>
    </Style>
</Application.Resources>

DataTemplateがピックアップされ、目的の結果が生成されます...そこで何が起こっているのかわかりません...誰かがこれを明確にすることができますか?

ありがとう。

役に立ちましたか?

解決

同様の質問に答えました ここ. 。質問はまったく同じではありません。マージされた辞書がスキップされていたが、おそらく同じバグである可能性が高い。

これは最適化のバグです このリンク.

XAML内のすべてのオブジェクトの作成については、デフォルトのスタイルが存在する場合(つまり、タイプのキー付きスタイル)、そのスタイルを適用する必要があります。ご想像のとおり、可能な限り(暗黙の)見た目を軽量化するためのいくつかのパフォーマンスの最適化があります。そのうちの1つは、「デフォルトスタイルを含む」とフラグが付けられない限り、リソース辞書の内部を見ることができないことです。バグがあります。すべてのデフォルトスタイルがマージされた辞書にネストされている場合、3レベルの深さ(またはより深い)が上部辞書にフラグが付けられないため、検索がスキップします。回避策は、デフォルトのスタイルをルート辞書に何かに置くことです。

あなたもすでに回避策を見つけているようです。app.xamlにデフォルトのダミースタイルを追加するだけです。セッターなどは必要ありません。

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="{x:Type Rectangle}" /> 
</Application.Resources>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top