- 浏览: 670963 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
silverlight类库中没有提供,在网上找了找,貌似资料很少。现把我找到的一个并做了小量的修改,现拿出来分享一下:
总共分为两个类:XamlHelper和XamlWriter。
XamlHelper.cs
using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Reflection; using System.Text.RegularExpressions; namespace SARuntimeXAMLWriter { internal class XamlHelper { internal static bool hasCollections(DependencyObject obj) { PropertyInfo[] props = obj.GetType().GetProperties(); foreach (var prop in props) if (prop.Name != "Parent" && (prop.PropertyType.BaseType.Name == "Collection`1" || prop.PropertyType.Name == "Transform")) return true; return false; } internal static bool hasDeepCollections(DependencyObject obj, PropertyInfo prop) { if (obj == null || prop.PropertyType.IsArray) return false; return ((prop.GetValue(obj, null) ?? new object()).ToString().StartsWith("System.")); } internal static string getSilverlightCompatibleXaml(string xaml) { Regex reg = new Regex(@"(\<(/)?\w+\.Children\>)", RegexOptions.None); return reg.Replace(xaml, "").Replace("xName", "x:Name"); } } }
XamlWriter.cs
using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Reflection; using System.Text; using System.Xml; namespace SARuntimeXAMLWriter { public class XamlWriter { public static string Write(DependencyObject parent) { StringBuilder sb = new StringBuilder(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; settings.Indent = true; XmlWriter writer = XmlWriter.Create(sb, settings); //if (!TypeValidator.isValid(parent)) // throw new TypeValidationException(); writer.WriteStartElement(parent.GetType().Name); writeCLRProperties(parent, writer); writeDPs(parent, writer); writeBrushes(parent, writer); writeCollections(parent, writer); writer.WriteEndElement(); writer.Flush(); writer.Close(); return XamlHelper.getSilverlightCompatibleXaml(sb.ToString()); } private static void writeCLRProperties(DependencyObject target, XmlWriter writer) { PropertyInfo[] props = target.GetType().GetProperties(); bool hdc = false; foreach (var prop in props) { hdc = XamlHelper.hasDeepCollections(target, prop); if (prop.Name == "Name") { if (prop.GetValue(target, null).ToString() != "") writer.WriteAttributeString("x" + prop.Name, prop.GetValue(target, null).ToString()); } else if (prop.Name != "Parent" && prop.CanRead && prop.CanWrite && prop.GetValue(target, null) != null && prop.PropertyType.BaseType.Name != "Collection`1" && prop.PropertyType.Name != "Brush" && !hdc) { var propValue = prop.GetValue(target, null).ToString(); if (!propValue.Equals("Infinity") && !propValue.Equals("NaN")) writer.WriteAttributeString(prop.Name, prop.GetValue(target, null).ToString()); } } } private static void writeDPs(DependencyObject target, XmlWriter writer) { //DPs problem try { writer.WriteAttributeString("Canvas.Left", target.GetValue(Canvas.LeftProperty).ToString()); writer.WriteAttributeString("Canvas.Top", target.GetValue(Canvas.TopProperty).ToString()); writer.WriteAttributeString("Canvas.ZIndex", target.GetValue(Canvas.ZIndexProperty).ToString()); } catch { } try { writer.WriteAttributeString("Storyboard.TargetName", target.GetValue(Storyboard.TargetNameProperty).ToString()); writer.WriteAttributeString("Storyboard.TargetProperty", target.GetValue(Storyboard.TargetPropertyProperty).ToString()); } catch { } } private static void writeBrushes(DependencyObject target, XmlWriter writer) { PropertyInfo[] props = target.GetType().GetProperties(); object val; foreach (var prop in props) if (prop.PropertyType.Name == "Brush" && (val = prop.GetValue(target, null) ?? new object()).ToString() != "") { if (val.ToString() == "System.Object") continue; writer.WriteStartElement(prop.ReflectedType.Name + "." + prop.Name); writer.WriteStartElement(val.ToString().Split('.')[3]); writeCLRProperties((DependencyObject)val, writer); writeDeepCollections((DependencyObject)val, writer); writeCollections((DependencyObject)val, writer); writer.WriteEndElement(); writer.WriteEndElement(); } } private static void writeCollections(DependencyObject target, XmlWriter writer) { if (target == null) return; PropertyInfo[] props = target.GetType().GetProperties(); int cnt; object val; string collectionElement = ""; foreach (var prop in props) if (prop.Name != "Parent" && prop.PropertyType.BaseType != null && prop.PropertyType.BaseType.Name == "Collection`1") { cnt = (int)prop.PropertyType.InvokeMember("get_Count", BindingFlags.InvokeMethod, null, prop.GetValue(target, null), null); for (int i = 0; i < cnt; i++) { val = prop.PropertyType.InvokeMember("get_Item", BindingFlags.InvokeMethod, null, prop.GetValue(target, null), new object[] { i }); if (XamlHelper.hasCollections((DependencyObject)val)) { if (collectionElement != prop.ReflectedType.Name + "." + prop.Name) { if (collectionElement != "") writer.WriteEndElement(); collectionElement = prop.ReflectedType.Name + "." + prop.Name; writer.WriteStartElement(collectionElement); } writer.WriteStartElement(val.GetType().Name); writeCLRProperties((DependencyObject)val, writer); writeDPs((DependencyObject)val, writer); writeBrushes((DependencyObject)val, writer); writeCollections((DependencyObject)val, writer); writer.WriteEndElement(); } else { writer.WriteStartElement(val.GetType().Name); writeCLRProperties((DependencyObject)val, writer); writeDPs((DependencyObject)val, writer); writeBrushes((DependencyObject)val, writer); writeDeepCollections((DependencyObject)val, writer); writer.WriteEndElement(); } } if (collectionElement != "") { writer.WriteEndElement(); collectionElement = ""; } } //TransformGroup not inherits from Collection, so it can not be added //through writeCollections/writeDeepCollections and we should handle //it separately else if (prop.PropertyType.Name == "Transform") { val = prop.GetValue(target, null); if (val == null) continue; if (val.GetType().ToString() != "System.Windows.Media.TransformGroup" || ((int)val.GetType().GetProperty("Children").GetValue(val, null).GetType().GetProperty("Count").GetValue(val.GetType().GetProperty("Children").GetValue(val, null), null)) == 0) continue; writer.WriteStartElement(prop.ReflectedType.Name + "." + prop.Name); writer.WriteStartElement(val.GetType().Name); writeCollections(val as DependencyObject, writer); writer.WriteEndElement(); writer.WriteEndElement(); } } private static void writeDeepCollections(DependencyObject target, XmlWriter writer) { PropertyInfo[] props = target.GetType().GetProperties(); object val; foreach (var prop in props) if (prop.PropertyType.BaseType.Name != "Collection`1" && prop.PropertyType.Name != "Transform" && XamlHelper.hasDeepCollections(target, prop)) { val = prop.GetValue(target, null); if (val != null & val.GetType().Equals(typeof(DependencyObject))) { writer.WriteStartElement(prop.Name); writeCollections((DependencyObject)val, writer); writer.WriteEndElement(); } } } } }
示例:
前台代码:
<Grid x:Name="LayoutRoot" Background="White"> <Grid.RowDefinitions> <RowDefinition Height="200"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Canvas Height="100" Width="200" x:Name="myCanvas" Background="Beige"> <TextBlock Text="Amyo Kabir"></TextBlock> </Canvas> <TextBox Grid.Row="1" x:Name="textBoxOutput"></TextBox> </Grid>
后台代码:
var root = XamlWriter.Write(myCanvas).Replace("x:", ""); var elm = XElement.Parse(root); foreach (var child in myCanvas.Children) { elm.Add(XElement.Parse(XamlWriter.Write(child).Replace("x:", ""))); } textBoxOutput.Text = elm.ToString();
textBoxOutput的内容为:
<Canvas Width="200" Height="100" MinWidth="0" MinHeight="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,0,0" FlowDirection="LeftToRight" Name="myCanvas" AllowDrop="False" Opacity="1" RenderTransformOrigin="0,0" IsHitTestVisible="True" Visibility="Visible" UseLayoutRounding="True" Canvas.Left="0" Canvas.Top="0" Canvas.ZIndex="0"> <Canvas.Background> <SolidColorBrush Color="#FFF5F5DC" Opacity="1" /> </Canvas.Background> <TextBlock FontSize="11" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" TextWrapping="NoWrap" TextTrimming="None" TextAlignment="Left" Text="Amyo Kabir" Padding="0,0,0,0" LineHeight="0" LineStackingStrategy="MaxHeight" MinWidth="0" MinHeight="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,0,0" FlowDirection="LeftToRight" AllowDrop="False" Opacity="1" RenderTransformOrigin="0,0" IsHitTestVisible="True" Visibility="Visible" UseLayoutRounding="True" Canvas.Left="0" Canvas.Top="0" Canvas.ZIndex="0"> <TextBlock.Foreground> <SolidColorBrush Color="#FF000000" Opacity="1" /> </TextBlock.Foreground> </TextBlock> </Canvas>
发表评论
-
silvelright酷站
2011-03-22 18:47 808http://completit.com/# -
silverlight翻转代码
2011-03-13 18:46 1115using System; using System.Net ... -
silverlight独立存储示例
2011-03-07 17:17 1060void CreateDir(string dirNam ... -
silverlight SDK和toolit中控件英文如何转换为英文
2010-11-11 15:50 993解决方法: 设置 ... -
Silverlight4:网络地图服务
2010-10-16 11:01 1606Bing Maps与Google Earth一样 ... -
通过JS创建silverlight对象
2010-10-12 13:04 1664前言: 对于我们开发的silverlight应用来讲,有的时 ... -
silverlight childwindow源码
2010-09-18 21:17 1968<!-- // (c) Copyright Micro ... -
精彩的 Silverlight 开源项目
2010-08-18 14:32 2925Silverlight 物理模型 http://www.c ... -
MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
2010-08-12 10:34 954本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
2010-08-12 10:03 650本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
2010-08-12 09:52 568本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
2010-08-12 09:24 861本系列文章非原创,转载自: 作 者:Beniao ... -
MEF程序设计指南一:在应用程序中宿主MEF
2010-08-12 09:17 1051本系列文章非原创,转 ... -
silverlight应用程序库缓存
2010-08-10 14:22 1525应用程序库缓存可在用户重新访问网站时帮助改善启动性能。 ... -
Prism动态模块加载
2010-08-10 10:27 1665这篇介绍模块在silverlight的特殊应用. sil ... -
Silverlight中Json数据的转换方法(中文)
2010-08-04 11:36 1243[DataContract] public clas ... -
silverlight万花筒效果
2010-07-28 16:14 893见附件。 -
silverlight如何将颜色字符串转换为颜色
2010-07-02 10:42 1536public class ColorUtil { ... -
silverlight中Tab转Enter的实现方法
2010-06-04 17:38 1735silverlight项目中要求界面全键盘操作,并且在光标移动 ... -
在两个Silverlight应用间数据通信(包括与Flash通信)
2010-05-13 17:06 1008声明:该博文转载自:http://daizhj.blog.51 ...
相关推荐
这可以通过使用`XamlReader.Load()`方法完成,它将XAML字符串转换为`UIElement`对象。 2. **创建`RenderTargetBitmap`**:接下来,创建一个`RenderTargetBitmap`对象,指定所需的分辨率和像素格式。`...
在代码中,我们可以创建一个`StringReader`对象来读取字符串,然后利用`XmlTextReader`解析这个字符串,最后通过`XamlReader.Load()`方法将解析后的XML转换为实际的UI对象。示例代码如下: ```csharp public void...
在本文中,我们将深入探讨Silverlight中的对象和属性,并通过实用示例来帮助您更好地理解和应用这些概念。 首先,让我们了解Silverlight的核心对象。在Silverlight中,UI元素是构建用户界面的基本组成部分,例如...
例如,如果你有一个字符串,其中包含了你想要动态创建的控件的XAML定义,你可以使用XamlReader将这个字符串转换为实际的UI元素,然后添加到布局容器中。 ```csharp string xamlString = "点击我'/>"; UIElement ...
createFromXaml方法用于动态解析XAML字符串并创建对象,这在运行时创建和修改UI非常有用。访问和修改元素及属性通常通过FindName方法和依赖属性(Dependency Property)机制来实现。 五、图形与画刷 Silverlight...
在Silverlight中,控件是构建用户界面的基本元素,它们继承自`UIElement`类,拥有显示、布局和事件处理等功能。时间选择控件(TimePicker)通常用于让用户方便地选择时间,包括小时和分钟。在Windows Phone和WPF...
接下来,你可以将BitmapSource对象转换为ImageSource,然后设置到Image控件的Source属性,从而在Silverlight页面上显示图片。 ```csharp private void LayoutRoot_Drop(object sender, DragEventArgs e) { if (e....
在XAML中,我们可以为Panel设置一个名为`Visibility`的属性,该属性可以接受三个值:`Visible`(默认,表示元素可见)、`Collapsed`(元素不占用空间且不可见)和`Hidden`(元素占用空间但不可见)。要实现面板的...
在Silverlight 4中,开发人员可以利用Google Maps API来集成地图功能,为用户提供互动式的地理定位服务。本文将深入探讨如何在Silverlight应用程序中实现Google Map的集成,以及涉及的相关知识点。 首先,理解...
在Silverlight的应用开发中,实现对象的拖动功能是非常常见的需求之一。例如,在设计交互式的图表、布局编辑器或者游戏场景时,都需要让用户能够方便地拖动元素到指定的位置。但是,传统的实现方式可能会导致代码...
通过本培训大纲,学员将全面了解Silverlight技术,掌握开发富互联网应用程序的技能,包括界面设计、动画制作、多媒体处理以及数据交互等方面,为构建高效、美观的Web应用奠定坚实基础。如需进一步学习,可联系文中...
在本文中,我们将深入探讨Silverlight中的自定义控件,特别是关于模板化控件和事件的处理。在Silverlight开发中,自定义控件能够帮助我们实现特定的功能,提升用户体验,而模板化则是让控件外观和行为更具可定制性。...
在本文中,我们将深入探讨Silverlight中的动画菜单效果,这是微软为Web开发提供的一种富交互技术。Silverlight作为WPF(Windows Presentation Foundation)的网络版本,允许开发者创建具有动态图形、视频和交互性...
- **元素与.NET Framework类型对应**:XAML中的每个元素都对应于.NET Framework中的一个特定类型,这有助于保持代码的一致性和可维护性。 - **节点树创建**:XAML不仅定义了用户界面的外观,还可以创建复杂的节点树...
UIElement.CaptureMouse() - 为 UIElement 对象释放鼠标捕捉 13、Silverlight(15) - 2.0数据之一次绑定, 单向绑定, 双向绑定, INotifyPropertyChanged, 数据转换, 数据验证 介绍 Silverlight 2.0 数据绑定: ...
3. **基于`TranslateTransform`偏移量的拖动**:`TranslateTransform`是WPF和Silverlight中的一个转换类型,允许对象在X和Y轴上平移。这种方法不仅适用于任何布局,而且可以利用Behavior进行封装,使其可以方便地...
在IT行业中,Silverlight是一种基于.NET Framework的浏览器插件,由微软开发,主要用于构建和展示丰富的交互式用户界面,尤其是在Web应用中。本篇文章将详细探讨Silverlight在画图和流程图方面的应用,以及如何实现...
首先,在XAML中,我们可能会有一个按钮来触发全屏模式,例如: ```xml 全屏" Click="Button_Click"/> ``` 在对应的后台代码(C#或VB.NET)中,`Button_Click`事件处理程序将是实现全屏的关键: ```csharp private...
首先,我们要理解Silverlight中的基本元素,如UIElement和Visual,它们是构建界面的基础。UIElement提供了事件处理和布局管理,而Visual则处理绘图和可视化操作。在图片缩放的场景中,通常会用到Image控件,它是...