Silverlight
2
提供了
System.Windows.Markup.XamlReader.Load(string
xaml)
来动态的创建
XAML
,
但这差不多限于短小的
xaml
片段创建,若要是从
xaml
文件直接读取创建,则写一个函数
LoadXaml
比较现实。
XAML
文件本身也是资源,因此资源的
Build Action
(生成操作)不同,则引用该文件的
uri
也不同。例如
build action
为
"Resource"
时,资源文件嵌入到程序集中;为
"Content"
时,只打包进
.xap
中等等,可参考《
Silverlight Resource
概
览
》。
代码比描述更能表
达意思,参考解决方案资源管理器和运行结果图示。
btn1.xaml
文件里其实也仅仅拿了个
button
作为示例:
<Button
xmlns='http://schemas.microsoft.com/client/2007' Width="60" Height="50"
Margin="10" Content="Page"></Button>
。
btn2.xaml
和
btn3.xaml
只是用
Content
的不同来显示不同的
Build Action
。
btnRed
是用
string
方式创建的,
btnDef
则是因为错误的引用
xaml
文件。
page.xaml
里有一个名称为
sp
的
StackPanle
来承载这些
button
,别的没有。今天比较烦躁,
Over
!
Silverlight 2
昨晚
6
点正式发布,这周末再考虑升级。
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
//Silverligh2 提供 XamlReader.Load(string xaml) 片段式 创建xaml。
//命名空间"http://schemas.microsoft.com/client/2007" 不能少。
string buttonXAML = "<Button xmlns='http://schemas.microsoft.com/client/2007' Width=\"60\" Height=\"50\" Content=\"string\" Margin=\"10\" Foreground=\"Red\"></Button>";
Button btnRed = (Button)System.Windows.Markup.XamlReader.Load(buttonXAML);
sp.Children.Add(btnRed);
//从文件创建,该文件 的Build Action 为 "Page", 与"Resource"类似,被嵌入程序集内
Button btn1 = (Button)LoadXaml("/LoadXaml;component/btns/btn1.xaml");
sp.Children.Add(btn1);
//从文件创建,该文件 的Build Action 为 "Resource",被嵌入程序集内
//注意格式:"/命名空间;component/文件位置"
Button btn2 = (Button)LoadXaml("/LoadXaml;component/btns/btn2.xaml");
sp.Children.Add(btn2);
//从文件创建,该文件 的Build Action 为 "Content",仅打包进.xap中,不在任何程序集内
Button btn3 = (Button)LoadXaml("btns/btn3.xaml");
sp.Children.Add(btn3);
//从错误的文件创建,最终生成的是默认的对象
Button btnDef = (Button)LoadXaml("btns/btn4.xaml");
sp.Children.Add(btnDef);
}
/// <summary>
/// 从xaml文件中 创建 xaml对象
/// </summary>
/// <param name="file">xaml文件的"地址"</param>
/// <returns>返回xaml文件定义的对象</returns>
public static object LoadXaml(string file)
{
Uri fileUri = new Uri(file, UriKind.Relative);
System.Windows.Resources.StreamResourceInfo streamInfo = System.Windows.Application.GetResourceStream(fileUri);
if ((streamInfo != null) && (streamInfo.Stream != null))
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(streamInfo.Stream))
{
return System.Windows.Markup.XamlReader.Load(reader.ReadToEnd());
}
}
//若文件不存在,则返回默认创建的对象
return CreateDefaultObject();
}
//创建默认对象,以一个简单的button为例
public static object CreateDefaultObject()
{
Button btn = new Button();
btn.Width = 60;
btn.Height = 50;
btn.Margin = new Thickness(10);
btn.Foreground = new SolidColorBrush(Colors.Blue);
btn.Content = "Default";
return btn;
}
}
xaml代码:
<UserControl x:Class="SilverlightApplication2.MainPage"
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"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<StackPanel x:Name="sp">
</StackPanel>
</Grid>
</UserControl>
分享到:
相关推荐
在本文中,我们将深入探讨如何使用Visual Studio 2017在WPF(Windows Presentation Foundation)应用程序中实现XamlReader来动态加载Xaml文件。XamlReader是.NET Framework中的一个关键工具,它允许我们在运行时解析...
在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)中动态加载XAML文件来展示3D模型。WPF是Microsoft提供的一种强大的用户界面框架,支持丰富的图形和媒体功能,包括3D渲染。XAML(Extensible ...
本示例主要关注如何在 Silverlight 应用程序中使用 OxyPlot 动态加载 XAML 文件来创建交互式图表。 在 Silverlight 开发中,OxyPlot 提供了一个灵活的 API,允许开发者轻松地创建各种图表类型,如线图、柱状图、...
动态加载XAML控件允许程序在运行时根据需要加载和添加UI组件,提供了更大的灵活性。 本文将深入探讨如何在WPF中实现动态加载XAML控件,并通过实例分析动态调用技巧。首先,我们需要了解WPF中的几种加载方式: 1. *...
1. **加载XAML**:首先,你需要解析XAML文件并实例化对应的UI元素。这可以通过使用`XamlReader.Load()`方法完成,它将XAML字符串转换为`UIElement`对象。 2. **创建`RenderTargetBitmap`**:接下来,创建一个`...
通过使用XAMLReader,我们可以加载一个XAML文件,将其转换为一系列的对象实例,这些对象可以直接在应用程序中使用。XAMLReader的主要方法有`Read()`,它会返回一个`XamlNode`对象,表示XAML文档中的下一个节点。...
- **从代码中加载XAML**:除了静态加载XAML文件,还可以在运行时动态加载和解析XAML,以实现更灵活的应用程序设计。 学习XAML可以帮助开发者高效构建美观且功能丰富的桌面和移动应用程序,理解其语法和机制是成为...
- 创建XAML文件后,需要将其与代码文件关联起来,以便在运行时加载并显示界面。 - **创建项目后再创建XAML文件**: - 在项目创建完成后,手动添加XAML文件。 - **创建项目时创建XAML文件**: - 在创建项目时选择...
在Windows Presentation Foundation(WPF)框架中,动态调用资源文件是一种常见的技术,它使得开发者能够在运行时根据需求加载和应用不同的资源。标题中的“WPF动态调用资源文件”特指在WPF应用程序中,如何根据用户...
3. `ILSpy.sln`、`ILSpy.suo`:这是ILSpy项目的解决方案文件和用户选项文件,用Visual Studio打开`.sln`文件可以加载整个项目,`.suo`文件则存储了用户特定的设置和调试信息。 4. `README.txt`:通常包含项目的简短...
- 数据绑定:处理 XAML 中的数据绑定,转换为适合于浏览器环境的数据绑定解决方案,例如 JSON 或 AJAX 调用。 在实现过程中,开发者可能会面临以下挑战: - HTML 与 WPF 控件的不完全对应:某些 HTML 元素可能没有...
XAML提供了一种简洁的方式来定义UI元素,并且可以通过静态或动态的方式绑定到数据。 #### 二、XAML在Silverlight中的作用 在Silverlight环境中,XAML主要扮演以下几个角色: - **声明UI及其元素格式**:XAML用来...
当应用启动时,视图模型可以从数据库、配置文件或任何其他数据源加载菜单数据,然后构建这个树形结构。 在WPF中,我们可以使用`ObservableCollection<T>`来存储菜单项,因为这个集合是支持数据绑定的,可以实时反映...
然而,有时我们需要在XAML文件中直接引用或执行C#代码,以便实现更复杂的逻辑或动态行为。本教程将详细解释如何将C#代码嵌入XAML文件,以及这种做法的优缺点。 首先,理解C#与XAML的交互方式是至关重要的。在WPF中...
XAML文件通常以`.xaml`为扩展名,它使得非程序员也能通过直观的方式设计和编辑界面。例如,在这个"**WPFtest**"压缩包中可能包含了一个或多个`.xaml`文件,它们定义了用户界面的各种元素。 **WPF界面设计** 1. **...
- **从代码中加载XAML**:通过`XamlReader`类可以从代码动态加载和解析XAML。 - **XAML相关主题**:还有许多其他主题,如数据绑定、样式和模板等,这些是构建复杂UI的关键部分。 XAML的灵活性和声明性使得它成为...
第8章(\C08) 示例描述:本章介绍了XAML的语法,包括原理、使用方法以及事件处理等等。 AttachedProperty 使用XAML中的附加属性。 CodebehindDemo 使用XAML中的... XamlReaderDemo 动态加载和编译XAML示例。
1. **解析SVG文件**:这涉及到读取SVG文件的内容,提取其中的路径数据和其他形状信息。SVG文件通常包含一个或多个`<path>`元素,每个元素都有一个`d`属性,包含了描述图形的指令序列。 2. **转换路径数据**:SVG的...
在某些场景下,我们可能需要在后台动态地加载和应用样式文件,以实现更加灵活和可扩展的应用设计。本文将深入探讨如何在WPF后台动态调用样式文件,以实现这一功能。 首先,我们需要理解WPF中的样式和资源。样式...
它们可以存储在项目的各种位置,包括XAML文件、应用程序资源字典(App.xaml)、或者外部文件中。将资源文件放入DLL有以下好处: 1. **代码重用**:DLL可以作为独立的组件,供多个项目共享资源。 2. **组织结构**:...