Patrick
Patrick

Reputation: 2577

WPF Set Static Resource At Runtime

How can I set the style of a button at runtime using a static resource? The xaml looks like this:

<Button  Grid.Column="0" Grid.Row="2"  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="1,0,1,0" 
                     Background="{StaticResource OrangeGradient}"  FontFamily="Lucida Sans"  BorderBrush="Black" >

What would the Background="{StaticResource OrangeGradient}" look like in c# at runtime?

My Resource dictionary, Resources/Styles.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:myProj">

<LinearGradientBrush  x:Key="OrangeGradient" EndPoint="0.5,1" StartPoint="0.5,0">
        <LinearGradientBrush.RelativeTransform>
            <TransformGroup>
                <ScaleTransform CenterY="0.5" CenterX="0.5"/>
                <SkewTransform CenterY="0.5" CenterX="0.5"/>
                <RotateTransform Angle="270" CenterY="0.5" CenterX="0.5"/>
                <TranslateTransform/>
            </TransformGroup>
        </LinearGradientBrush.RelativeTransform>
        <GradientStop Color="#FFE08A19" Offset="0"/>
        <GradientStop Color="#FFF5CA86" Offset="1"/>
    </LinearGradientBrush>

App.xaml:

<Application x:Class="myProj.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:myProj"
             StartupUri="MainWindow.xaml">

    <Application.Resources>

        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Styles.xaml"   />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </Application.Resources>

</Application>

Upvotes: 5

Views: 3841

Answers (1)

Evk
Evk

Reputation: 101593

Analog of setting Background to static resource, but at runtime is just:

yourButton.Background = (Brush)this.Resources["OrangeGradient"];

Where Resources is ResourceDictionary with target brush, for example root ResourceDictionary of your Window or UserControl.

Upvotes: 3

Related Questions