1 2 下一页 在 Silverlight 下换肤的实现中,我介绍了 Nikhil Kothari 实现的一种 Theme 方案。但是实践了一下,我很快发现有个小小的缺陷。作者的皮肤定义是仅针对系统自带的控件的,如 Button, T extBox, CheckBox 等,而对于我们自定义的控件的换肤问题没有很好的解决。从下列代码中可见一斑: (/Framework/Applications/Theme.cs) public string GetXML() { string resourceDictionaryFormat = @"<UserControl XMLns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:vsm=""clr-namespace:System.Windows;assembly=System.Windows""> <UserControl.Resources> {0} </UserControl.Resources> </UserControl>"; _content.Replace(@"xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""", ""); _content.Replace(@"xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""", ""); _content.Replace(@"xmlns:vsm=""clr-namespace:System.Windows;assembly=System.Windows""", ""); return String.Format(resourceDictionaryFormat, _content.ToString()); }
可以看出这里名称空间都是写死了的,不支持任何扩展。 而实际使用中,我们可能会对某个第三方控件定义样式。比如: <UserControl 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:liquid="clr-namespace:Liquid;assembly=Liquid" mc:Ignorable="d" x:Class="UserControl" d:DesignWidth="640" d:DesignHeight="480"> <UserControl.Resources> <Style x:Key="MyLiquidDialog" TargetType="liquid:Dialog"> <!-- 略 --> </Style> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White" /> </UserControl>
(责任编辑:admin) |