Visual Studio 2010 | .NET/WPF 4.0
I think this might be a WPF bug, but I can't seem to find a bug report about it. To cover the possibility that I'm just missing something obvious, I turn to stackoverflow for answers!
Consider this xaml (nothing in the codebehind):
<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>
In the designer, it renders as expected. The outer border has a big blue border and a red background, the inner border has a big blue border. Great.
When I run the code, the outer border has NO border - it looks like it just doesn't load. The background is set to red correctly. Meanwhile, the inner border does load its blue border correctly.
If I change all "DynamicResource" to "StaticResource", it renders correctly when run. The inconsistency is really bugging me, and I can't figure it out.\
So:
- Why doesn't DynamicResource work for BorderBrush?
- Given #1, why does it work for Background?
- Why does explicitly defining the solid color brush in the resources seem to fix things?
EDIT:
Looks like it's a bug that MS decided not to fix (thanks to Sheridan for the link): http://connect.microsoft.com/VisualStudio/feedback/details/589898/wpf-border-borderbrush-does-not-see-changes-in-dynamic-resource
Transparent
(No errors) and this issue does not occur if you just set the Brush directly even for the outer border as inBorderBrush="{DynamicResource BorderColorBrush}"
. Hence looks more like an issue of when the SolidColorbrush for BorderBrush is being created from a DynamicResource Color, it gets things screwed up. Not sure maybe some weird case of trying to lock resources / access them – CareycarfareApp.xaml
, it works fine for your exact code – CareycarfareApp.xaml
. – Lowgrade