首页 > 解决方案 > XamlWriter.Save(object) - 设置根和其他命名空间

问题描述

我正在通过XamlWriter.Save(object). 这按预期工作。

现在的问题是,XamlWriter根据需要设置命名空间,例如根命名空间xmlns设置为 my 的命名空间object

问题是,我想将 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”属性。

标签: xmlwpfxamlxml-namespacesxamlwriter

解决方案


我没有完全遵循解释,但也许这并不重要。结果不是你想要的。

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


推荐阅读