Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XamlWriter.Save(对象)-设置根;附加名称空间_Xml_Wpf_Xaml_Xml Namespaces_Xamlwriter - Fatal编程技术网

Xml XamlWriter.Save(对象)-设置根;附加名称空间

Xml XamlWriter.Save(对象)-设置根;附加名称空间,xml,wpf,xaml,xml-namespaces,xamlwriter,Xml,Wpf,Xaml,Xml Namespaces,Xamlwriter,我正在通过XamlWriter.Save(object)序列化一个对象。这正如预期的那样有效 现在的问题是,XamlWriter根据需要设置名称空间,例如根名称空间xmlns设置为我的对象的名称空间 问题是,我想将xaml复制到现有的xaml中,其中已经定义了名称空间。它可以工作,因为XamlWriter还将名称空间属性添加到生成的字符串中,但我希望重用我已经存在的前缀。这可能吗 样本XAML: <Grid xmlns="http://schemas.microsoft.com/winfx

我正在通过
XamlWriter.Save(object)
序列化一个对象。这正如预期的那样有效

现在的问题是,
XamlWriter
根据需要设置名称空间,例如根名称空间
xmlns
设置为我的
对象的名称空间

问题是,我想将xaml复制到现有的xaml中,其中已经定义了名称空间。它可以工作,因为
XamlWriter
还将名称空间属性添加到生成的字符串中,但我希望重用我已经存在的前缀。这可能吗

样本XAML:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:shared="urn:mlog-sharedclasses-ns"
      xmlns:visu="urn:mlog-visucommon-ns"
      Width="2000"
      Height="1000"
      Background="White"
      TextBlock.FontFamily="{StaticResource OpenSans}"
      assembly:Name="rootElement"
      mc:Ignorable="d">
  <Grid.Resources>
    <BoolToBrushConverter xmlns="clr-namespace:ControlPanel.SharedClasses.Converters;assembly=MCC.ControlPanel.SharedClasses"
                          FalseValue="#FF00FFFF"
                          TrueValue="#FF0000FF"
                          assembly:Key="ID_880cf_BorderBrush_Converter" />
  </Grid.Resources>
  <visu:TagRootCanvas>
    <Button Content="Button"
            Width="412"
            Height="231"
            Canvas.Left="33"
            Canvas.Top="71"
            assembly:Name="ID_880cf">
      <i:Interaction.Behaviors>
        <visu:TagBindingBehavior xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                                 xmlns="urn:mlog-visucommon-ns"
                                 Converter="{av:StaticResource ID_880cf_BorderBrush_Converter}"
                                 Debug="False"
                                 Mode="OneWay"
                                 Property="{shared:Static Member=av:Border.BorderBrushProperty}"
                                 TagDataType="Bool"
                                 TagName="aaa"
                                 UpdateSourceTrigger="Default"
                                 UseConvertedNullAsFallback="False" />
      </i:Interaction.Behaviors>
    </Button>
  </visu:TagRootCanvas>
</Grid>


我稍后通过XamlWriter.Save创建TagBindingBehavior并将其添加到我的文档中。但是它有不同的名称空间。我想从TagBindingBehavior中删除“xmlns”属性。

我不完全理解解释,但这可能并不重要。结果并不是你想要的

如果将as stringwriter参数与xamlwriter.save一起使用,则可以将xaml写入内存中的字符串,而不是直接写入磁盘。 这是一个字符串和xml。 您可以将其解析为xml文档并对其进行操作,也可以使用string.replace()等更改字符串。
无论哪种方式,您都可以更改任何属性或属性。

我知道,我已经写入字符串而不是文件。问题是XAML不是XML。您还拥有MarkupExtensions,这是XML所不知道的。因此,如果我更改一个xmlns,可能还会影响一个MarkupExtension。请查看现有的。我认为这里的重点是,所有序列化的内容都包含在一个XAML单页中,只有一个根元素,并且除了URI之外没有外部引用。另外,请您分享一下示例,您保存的对象是什么,如何保存?中只有xaml代码question@codebender看看斯科特·汉斯曼的。您可以通过添加
localName
s列表以省略,以及
(前缀,localName,ns)
类型列表以添加命名空间声明来扩展(重新)可用性。