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.

posted @ 2024-03-24 10:32  FredGrit  阅读(4)  评论(0编辑  收藏  举报