app.xamlのdataTemplateは、スタイルなしでピックアップされていませんか?
-
25-10-2019 - |
質問
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>
所属していません StackOverflow