Reputation: 737
I cannot bind the background dynamically because it raises exception " A 'DynamicResourceExtension' cannot be set on the 'Source' property of type 'Binding'. A 'DynamicResourceExtension' can only be set on a DependencyProperty of a DependencyObject."
<Window x:Class="TestWpfApplication.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestWpfApplication"
mc:Ignorable="d"
Title="Window2" Height="300" Width="300">
<Window.Resources>
<SolidColorBrush Color="Blue" x:Key="customColorBrush"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Background="{Binding Source={DynamicResource customColorBrush}}" Margin="20"></Button>
<Button Background="{Binding Source={StaticResource customColorBrush}}" Margin="20" Grid.Row="1" Click="Button_Click"></Button>
</Grid>
Upvotes: 0
Views: 1864
Reputation: 17402
Update your binding to remove the 'Binding' keyword from your DynamicResource and StaticResource declaration.
Update to:
<Button Background="{DynamicResource customColorBrush}" Margin="20"></Button>
<Button Background="{StaticResource customColorBrush}" Margin="20" Grid.Row="1" Click="Button_Click"></Button>
Note:
You should probably use only StaticResource here, as it appears you are not changing the Background color during run-time. DynamicResource is typically used to dynamically load the resource during run-time during the first time it is accessed, or if you want to do run-time switching (i.e., theme/theme switching). If you simply using it once, StaticResource is just fine (the brush will get applied during compile time).
Upvotes: 2