XamlWriter.Save (object) - установить корень и дополнительные пространства имен - PullRequest
0 голосов
/ 23 ноября 2018

Я сериализую объект через XamlWriter.Save(object).Это работает, как и ожидалось.

Проблема теперь в том, что XamlWriter устанавливает пространства имен так, как это необходимо, например, корневое пространство имен xmlns установлено на пространство имен моего object.

Проблема в том, что я хочу скопировать 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>

Позже я создаю TagBindingBehavior через XamlWriter.Save и добавляю его в свой документ.Но у него разные пространства имен.Я хочу удалить атрибуты "xmlns" из TagBindingBehavior.

1 Ответ

0 голосов
/ 23 ноября 2018

Я не полностью следую объяснениям, но, возможно, это не имеет значения.В результате получается не то, что вам нужно.

Если вы используете в качестве параметра stringwriter в xamlwriter.save, вы можете записать свой xaml в строку в памяти, а не прямо на диск.Это и строка, и xml.Вы можете разобрать это в XML-документе и манипулировать им, или вы можете просто изменить строку с помощью string.replace () или тому подобного.В любом случае, вы можете изменить любой атрибут или свойство, которое вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...