XAML代码如下:

<Window x:Class="Wpftest2.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Window.Resources> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1" x:Key="innerLgbResource"> <GradientStop Color="Red" Offset="0.0" /> <GradientStop Color="Orange" Offset="0.25" /> <GradientStop Color="yellow" Offset="{Binding ElementName=slider,Path=Value}" /> <GradientStop Color="Orange" Offset="0.75" /> <GradientStop Color="Red" Offset="1" /> </LinearGradientBrush> <!-- 可以直接设置Canvas容器的样式调用资源,这样Canvas就不用设置background属性了 但是这样对绑定的先后顺序会有影响,在cs文件中会叙述 <Style TargetType="Canvas"> <Setter Property="Background" Value="{DynamicResource innerLgbResource}"></Setter> </Style> --> </Window.Resources> <Canvas x:Name="canvas1" Background="{DynamicResource innerLgbResource}"> <Slider Name="slider" Minimum="0" Maximum="1" Value="0.5" TickPlacement="BottomRight" TickFrequency="0.2" Width="100"/> <TextBox Canvas.Left="89" Canvas.Top="132" Height="23" Name="textBox1" Width="120" Text="{Binding ElementName=slider,Path=Value}"/> <Button Canvas.Left="109" Canvas.Top="169" Height="23" Name="button1" Width="75" Click="button1_Click">Button</Button> </Canvas> </Window>

这里新建了一个资源innerLgbResource,资源的命名通过X:KEY来命名,当然资源也可以写在APP.XAML文件里,直接COPY过去就行。这里的资源主要是一个渐变色的背景,同时黄色部分的过渡位置绑定了SLIDER控件,这样当拉动SLIDER的时候背景会发生改变。

这里调用背景也可以通过设置STYLE来设置,在代码注释部分,就是其调用方法。

另外,这里是使用DynamicResource进行动态调用的,在BUTTON中有个ONCLICK事件,我会重写调用的资源,如果这里使用的是StaticResource那么即使你重写资源也不会有效果,当然SLIDER的绑定事件还是会有效果。

CS文件代码如下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; 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 Wpftest2 { /// <summary> /// Window1.xaml 的交互逻辑 /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { //新建资源 LinearGradientBrush brush = new LinearGradientBrush(); brush.StartPoint = new Point(0,0); brush.EndPoint = new Point(1, 1); brush.GradientStops.Add(new GradientStop(Color.FromRgb(240, 248, 255), 0)); //gs没有绑定方法 GradientStop gs = new GradientStop(Color.FromRgb(0, 100, 0), 0.1); /* * 如果xaml中是使用style调用资源的情况下 * 必须要在gs被add进入brush之前绑定,否则绑定不上。 * 应该是使用style的时候,style会占用该资源,使其变成只读,导致无法绑定。 * 如果不是用style绑定而是直接调用background属性的时候,则可以随时绑定 */ Binding bd = new Binding(); bd.Source = slider; bd.Path = new PropertyPath("Value"); BindingOperations.SetBinding(gs, GradientStop.OffsetProperty, bd); /* * 方法二 这里采用绑定slider的方法,因为GradientStop没有SetBinding方法 Binding bd = new Binding(); bd.Source = gs; bd.Path = new PropertyPath("Offset"); slider.SetBinding(Slider.ValueProperty, bd); */ brush.GradientStops.Add(gs); brush.GradientStops.Add(new GradientStop(Color.FromRgb(255, 140, 0), 1)); this.Resources["innerLgbResource"] = brush; } } }

这里有个onclick事件,当点击按钮,我重写了innerLgbResource资源,这样当采用DynamicResource绑定背景的时候,将会替换该背景。

同样我也将一个渐变色过度位置和SLIDER进行了绑定。绑定主要有两种方法:

1. 通过BindingOperations来进行绑定。

2. 由于GradientStop没有SetBinding()方法,所以这里要绑定slider,当然效果是一样的。

值得注意的是,如果在XAML文件中,设置背景资源是通过STYLE来设置的,那么设置绑定的时候必须要在GradientStop被添加到LinearGradientBrush之前绑定,如果添加之后再绑定,会因为GradientStop已经被设置为只读而报错。

WPF资源Resources的创建以及动态修改和数据绑定。相关推荐

  1. WPF学习之资源-Resources

    WPF学习之资源-Resources WPF学习之资源-Resources WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些 ...

  2. SAP QM中阶之动态修改规则创建

    SAP QM中阶之动态修改规则创建 1, 执行事务代码QDR1或者如下的菜单路径, 可以用来创建动态修改规则. 点击菜单或者执行事务代码QDR1, 进入如下界面, 输入DMR的code,比如Z01,回 ...

  3. IOS小组件(4-2):创建可配置小组件(动态修改配置数据)

    IOS小组件(4-2):创建可配置小组件(动态修改配置数据) 引言 在项目中添加"Intens Extension" 在 xxx.intentdefinition文件中增加一个动态 ...

  4. 静态资源(StaticResource)和动态资源(DynamicResource)

    静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用.这是通过使用 StaticResource 标记扩展或 DynamicRe ...

  5. WPF资源的基本概念

    WPF资源系统是一种保管一系列对象(如常用的画刷.样式或模版)的简单办法,从而更容易地复用这些对象. WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件.窗口一起定义,或在整个应用程序中定 ...

  6. WPF快速入门系列(6)——WPF资源和样式

    WPF快速入门系列(6)--WPF资源和样式 一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一 ...

  7. XAML实例教程系列 - 资源(Resources)

    在Windows 8 Metro应用开发中,XAML主要用于应用界面设计,无论是开发人员还是设计人员经常会设计自定义用户界面或者控件行为,其中会涉及到不同方面的代码设计,例如控件模板,控件样式,动画设 ...

  8. mysql中如何设置过滤器_mysql 如何动态修改复制过滤器

    MySQL动态修改复制过滤器 说说今天遇到的问题吧,今天在处理一个业务方的需求,比较变态,我大概描述一下: 1.线上的阿里云rds上面有个游戏的日志库,里面的表都是日表的形式,数据量比较大了,每次备份 ...

  9. 使用RestTemplate模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别

    Spring 与 Restful 整合才是微架构的核心,虽然在整个 SpringBoot(SpringCloud)之中提供有大量的 服务方便整合,但是这些 整合都不如 Rest 重要,因为 Rest ...

最新文章

  1. 599元的智能视频音箱发布,百度准备补贴几个亿?
  2. SwiftUI 发展现状和学习指南
  3. 安装Docker:解决container-selinux = 2.9问题
  4. 外循环java作用_循环和外循环的区别和作用
  5. CodeForces - 1484F Useful Edges(最短路)
  6. 第一天 echo test (()) [[]]
  7. win10系统eclipse中整合hadoop错误
  8. java二维码生成器
  9. 财务审计工具箱 audtool 数据处理分析必备工具
  10. 电子科技大学《图论及其应用》复习(史上最全汇总)
  11. 《jike--微服务架构核心20讲》笔记
  12. python-set
  13. 虚拟机安装python3_虚拟机如何安装python
  14. 心理测量?预知犯罪?AI可以减少京都之殇吗?
  15. webpack 极简教程(前端自动化构建)
  16. 15位身份证号和18位身份证号截取生日
  17. 从android恢复到iphone,iPhone换到安卓机有多难适应?看看是怎么恢复过来的!
  18. 维基百科中文创始人_维基百科的创始人正在建立一个社区运营的新闻网站
  19. 简单使用html+css+js随机获取一注双色球号码
  20. RHCA回忆录---DO447介绍

热门文章

  1. Warcraft III 分辨率设置
  2. Cocos2d-js 3.0 屏幕适配方案 分辨率适应
  3. C库函数 ——strstr、strtok的详解
  4. mysql数据库双向实时同步
  5. 软件著作权侵权的裁判要点
  6. WuThreat身份安全云-TVD每日漏洞情报-2023-05-30
  7. 深度学习-TextCNN网络(简单了解TextCNN网络构建过程)
  8. 小兔鲜儿项目pc客户端前端静态页面
  9. 深度学习-deepin深度学习环境搭建(deepin+gpu+cuda+cudnn)
  10. 单片机——用SRF04、BUZZER设计一个能单次启动测距系统电路