个人作品展示网站,做网站需要服务器吗,青海高端网站建设多少钱,网站建设 电商这节讲资源和值转换器(ValueConverter)。资源在XAML中#xff0c;我们想要使用外部的数据或者类#xff0c;需要引入其命名空间#xff0c;然后将其定义为XAML页面的资源#xff0c;供给控件使用#xff0c;或者我们需要封装一个共用的样式#xff0c;同样也需要定义成资… 这节讲资源和值转换器(ValueConverter)。资源 在XAML中我们想要使用外部的数据或者类需要引入其命名空间然后将其定义为XAML页面的资源供给控件使用或者我们需要封装一个共用的样式同样也需要定义成资源来使用下面我们看一下如何定义一个资源Window.ResourcesResourceDictionarysys:String x:Keyshow我是一个资源/sys:StringStyle x:KeystyleShow TargetTypeButtonSetter PropertyBackground ValuePurple /Setter PropertyForeground ValueWhite /
/Style/ResourceDictionary
/Window.Resources资源的类型是ResourceDictionary顾名思义资源是用键值对存储的所以定义资源时需要给它个key这个Key的value则根据定义资源的不同千变万化了像上方代码中定义一个string资源它的value就是一个普通的字符串定义一个样式资源它的value就是一个定义样式的setter对象。 那定义资源后如何使用呢这就又要用到标记扩展语法了请看下面的代码StackPanelButton Content{StaticResource show} Style{StaticResource styleShow} /
/StackPanel使用StaticResource命令获取一个资源后面接资源的key,我给这个button引入了上方定义的资源运行效果如下 另外除了StaticResource还有一个DynamicResource命令StaticResource在程序一开始加载一次如果资源中途变动是不会再更新到使用它的控件上的而DynamicResource则相反它会跟着资源的更新而更新所以要合理使用两者。 后台代码中声明资源和获取资源就简单多了代码如下this.Resources.Add(show, 我是个资源);//定义资源
object data this.Resources[show];
this.FindResource(show);后台无非就是操作键值对集合并且我们也可以使用FindResource方法来寻找资源。ValueConverter 上节我们提到一个情景将Button的显示与隐藏跟CheckBox是否选中做绑定这个就需要用到我们接下来讲的ValueConverter。 首先我们需要新建一个类代码如下class BoolToVisibilityConvert : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value null)return DependencyProperty.UnsetValue;if ((bool)value true){return Visibility.Visible;}else return Visibility.Collapsed;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value null)return false;if ((Visibility)value Visibility.Visible){return true;}else return false;}
}使用ValueConverter需要实现IValueConverter接口其内部有两个方法Convert和ConvertBack。我们在使用Binding绑定数据的时候当遇到源属性和目标控件需要的类型不一致的就可以使用ValueConverter它就相当于一个桥当数据从源到目标控件时需要走Convert方法我们在这个方法里边就可以自定义转换逻辑当数据从目标控件到源时需要走ConvertBack方法我们可以在这里边自定义回转逻辑。 上述代码中我就实现了Button的Visibility属性和bool之间的转换下面我们需要将这个类作为资源载入XAML页面让Button使用代码如下Window.ResourcesResourceDictionarylocal:BoolToVisibilityConvert x:KeyB2V //ResourceDictionary
/Window.Resources这个ValueConverter类的命名空间就是当前项目的命名空间所以直接使用local即可local是默认代表当前代码的命名空间简称具体相关XAML命名空间的知识参见前文剖析XAML语言。 XAML代码如下StackPanelCheckBox x:NameCB ClickCheckBox_Click /ButtonContent{StaticResource show}Style{StaticResource styleShow}Visibility{Binding ElementNameCB, PathIsChecked, Converter{StaticResource B2V}} /
/StackPanel程序运行效果如下 最后来解释一下转换方法的四个参数第一个就是数据我们要转换的值就是它第二个参数是目标类型当从bool转换为Visibility时这个参数就是Visibility反之则是bool第三个参数是转换参数可以在标记扩展中定义第四个是文化参数也是可以在扩展标记中定义详见如下Visibility{Binding ElementNameCB, PathIsChecked, Converter{StaticResource B2V},ConverterParametertrue,ConverterCulturezh-CN}第三个参数主要是提供一些转换上的辅助带给我们用于转换的更多的信息第四个我个人理解多用在国际化上我们可以根据这个参数获取当前的语言环境这两个都不是扩展属性都不能使用标记扩展。本节到此结束喜欢就点个在看吧...