wpf add resource dynamically in cs file
//xaml <Window x:Class="WpfApp12.MainWindow" 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:WpfApp12" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Window.Resources> <LinearGradientBrush x:Key="brush1"> <GradientStop Offset="0" Color="Yellow"/> <GradientStop Offset="1" Color="Orange"/> </LinearGradientBrush> </Window.Resources> <StackPanel x:Name="panel"> <Rectangle Height="100" Stroke="Black" Fill="{StaticResource brush1}"/> <Ellipse StrokeThickness="20" Height="100" x:Name="ellipse" Stroke="{StaticResource brush1}" /> <Rectangle Fill="{StaticResource brush2}" Stroke="Black" StrokeThickness="20" Height="100"/> </StackPanel> </Window> //xaml.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApp12 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { AddResources(); InitializeComponent(); FindResource(); } private void AddResources() { //green this.Resources.Add("brush2", new SolidColorBrush(Color.FromRgb(0,255,0))); } private void FindResource() { Brush bs = (Brush)this.FindResource("brush1"); Ellipse ellipse = panel.FindName("ellipse") as Ellipse; Ellipse elp2 = this.FindName("ellipse") as Ellipse; Brush brush2 = this.FindResource("brush1") as Brush; Brush bs2 = (Brush)this.TryFindResource("brush2"); if(bs2 != null) { bs2.Freeze(); } } } }
The key part located at add resource via c# ,and place the Add function before InitializeComponent,then we can invoke the added resource just now.