资源
- 对象级别
- 独立文件
静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再去访问这个资源了。
动态资源使用(DynamicResource)使用指的是在程序运行过程中仍然会去访问资源。
显然,如果你确定某些资源只在程序初始化的时候使用一次、之后不会再改变,就应该使用StaticResource,而程序运行过程中还有可能改变的资源应该以DynamicResource形式使用。
》》》对象级别
》》》取消绑定
BindingOperations.ClearBinding(this.控件, ContentControl.ContentProperty);
<Window x:Class="WpfApp1.Window1"
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:WpfApp1"
mc:Ignorable="d"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="450" Width="800">
<Window.Resources>
<sys:String x:Key="st">xxx</sys:String>
</Window.Resources>
<Grid>
//简写
<Button Content="{StaticResource st}"></Button>
<Button Content="{StaticResource ResourceKey=st}"></Button>
</Grid>
</Window>
》》》对立文件,资源字典
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="str">字符</sys:String>
<sys:Double x:Key="dbl">3.1415926</sys:Double>
</ResourceDictionary>
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="450" Width="800">
<Window.Resources>
//这个可以放在app.xaml 全局生效
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ZEN_Resource.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Style="{StaticResource st}"></Button>
</Grid>
</Window>
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ZEN_Resource.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
》》Resources.resx
》》》》》》》》 XAML定义了一个扩展标记x:Static来引用静态属性或字段。如:Content=“{x:Static SomeClass:SomeStaticProp}”。通常可以在C#代码中定义静态字段,然后在XAML中进行访问。但是一定要在XAML中引用该类
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:prop="clr-namespace:WpfApp1.Properties"
Title="Window1" Height="450" Width="800">
<Window.Resources>
</Window.Resources>
<Grid>
<Button Content="{x:Static prop:Resources.Info }"></Button>
</Grid>
</Window>
》》》媒体资源
pack url 方法访问二进制资源
》》》
pack://application:,[/程序集名称;,][可选版本号;][文件夹名称/]文件名称
pack://application:, 可省略
其中程序集名称、可选版本号 通常使用缺省值
下面效果一样
等价于后台代码
this.img01.Source= new BitMapImage( new Uri(“Images/xx.png”) ,UriKind.Relative);
this.img01.Source= new BitMapImage( new Uri(“pack://application:,/Images/xx.png”) ,UriKind.Absolute);
》》》pack://application:, 开头表示绝对路径,需要使用Urikind.Absolute
》》》缩写代表相对路径,UriKind必须为Relative,且代表根目录的 / 可以省略
UriKind.RelativeOrAbsolute
UriKind.Relative
UriKind.Absolute
引用命名空间
xmlns:自己起的别名=“clr-namespace:命名空间名称;assembly=程序集名称”
如果不记得命名空间,程序集
FrameworkElement
FrameworkElement 类 有个属性 Resources
只要继承FrameworkElement类的控件都有Resources这个属性,这就意味着该控件能在控件标签内定义资源。
所以 顶级控件Window,也是有资源的 Window.Resources
自定义资源
》》后台可以获取资源
//方式1》》
ZEN z = this.FindResource("z") as ZEN;
//方式2》》
ZEN z = this.Resources["z"] as ZEN