0

我发现了如何使用 XamlReader.Load() 以编程方式解析/加载 XAML 字符串,但是如果我让用户将“.xaml”文件拖放到我的 Silverlight 应用程序中,我将如何将该文件解析为一个 XAML 文件并将内容作为字符串读取以提供给 XamlReader.Load() 方法。

或者有没有通过使用反射更有效/更好的方法?

我想允许用户使用“silverlight for dummy”silverlight 设计师(在合理范围内)来设计一个简单的控件。(即标签和文本框)。然后将其保存或导出为 XAML 文件(或者我可以简单地让他们将其保存为 TXT 文件?)然后他们将此文件放入我的 Silverlight 应用程序中,并将文本解析为 XamlReader.Load() ,然后我可以将我新以编程方式创建的对象添加到列表框中。

我有拖放文件和加载 XAML 字符串的逻辑,但是获取“.xaml”文件内容的中间点是我自己困惑的地方......

编辑

@nicholas,这正是我所选择的。我不知道昨天发生了什么,但我想我只是有一个严重的“大脑放屁”。这就是我最终的结果:(仍然有一些清理和重构,但这是为了测试)

        IDataObject data = e.Data;
        if (data.GetDataPresent(DataFormats.FileDrop))
        {
            FileInfo[] files = data.GetData(DataFormats.FileDrop) as FileInfo[];

            if (files.Length > 1)
            {
                //TODO
            }
            else
            {
                FileInfo file = files[0];
                extension = file.Extension;
                string xaml = string.Empty;
                using (Stream stream = file.OpenRead())
                {
                    xaml = StreamUtils.StreamToString(stream);
                }
                if (!xaml.IsEmpty())
                {
                    try
                    {
                        myListBox.Items.Add(XamlReader.Load(xaml);
                    }
                    catch (Exception ex)
                    {
                        //TODO
                    }
                }
            }
4

2 回答 2

2

因此,您有一个Drop事件处理程序,您可以从中接收带有Data属性的事件参数,一个IDataObject. 从MSDN中,您可以了解如何FileStream为已删除的文件获取 a,然后您可以将其加载到字符串(例如 use StreamReader)中以由XamlReader.Load().

于 2012-04-11T13:17:16.467 回答
1

如果我理解正确,将分为三个不同的步骤:

  • 将 .xaml 文件或任何类型文件的内容解析为“字符串”(可以是 .txt 文件或任何其他格式)
  • 使用 XamlReader.Load() 从步骤 1 中的此字符串生成 UI 元素
  • 将步骤 2 中的 UI 元素插入 ListBox.Items 集合

这有帮助吗?

于 2012-04-11T12:21:31.267 回答