ビジュアル スタジオ 2010 | .NET/WPF 4.0
これは WPF のバグである可能性があると思いますが、それに関するバグ レポートが見つからないようです。明らかな何かが欠けている可能性をカバーするために、スタックオーバーフローに答えを求めます!
この xaml を検討してください (分離コードには何もありません):
<Window x:Class="DownExpanders.BorderTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="BorderTest" Height="300" Width="300">
<Window.Resources>
<Color x:Key="BackgroundColor" R="255" G="0" B="0" A="255"/>
<Color x:Key="BorderColor" R="0" G="0" B="255" A="255"/>
<SolidColorBrush x:Key="BorderColorBrush" Color="{DynamicResource BorderColor}"/>
</Window.Resources>
<Grid>
<Border BorderThickness="20">
<Border.Background>
<SolidColorBrush Color="{DynamicResource BackgroundColor}"/>
</Border.Background>
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderColor}"/>
</Border.BorderBrush>
</Border>
<Border Margin="40" BorderBrush="{DynamicResource BorderColorBrush}" BorderThickness="20"/>
</Grid>
</Window>
デザイナーでは、期待どおりにレンダリングされます。外側の境界線には大きな青い境界線と赤い背景があり、内側の境界線には大きな青い境界線があります。偉大な。
コードを実行すると、外側の境界線に境界線がありません。ロードされていないように見えます。背景は正しく赤に設定されています。一方、内側の境界線は青い境界線を正しくロードします。
「DynamicResource」をすべて「StaticResource」に変更すると、実行時に正しくレンダリングされます。この矛盾が本当に頭を悩ませているのですが、理解できません.\
そう:
- BorderBrush で DynamicResource が機能しないのはなぜですか?
- #1を考えると、なぜバックグラウンドで機能するのですか?
- リソースで単色ブラシを明示的に定義すると問題が解決するように見えるのはなぜですか?
編集:
MS が修正しないことを決定したのはバグのようです (リンクについてはSheridanに感謝します): http://connect.microsoft.com/VisualStudio/feedback/details/589898/wpf-border-borderbrush-does-not-see-動的リソースの変更