#c# #xml #wpf #xaml
#c# #xml #wpf ( ВП ) #xaml
Вопрос:
При разработке моего графического интерфейса я определил стиль для фигуры в файле xaml следующим образом:
<Style x:Key="Data" TargetType="Rectangle" BasedOn="{StaticResource FlowChartRectangleStyle}">
</Style>
<Style x:Key="Data_DragThumb" TargetType="Rectangle" BasedOn="{StaticResource Data}">
<Setter Property="IsHitTestVisible" Value="true"/>
<Setter Property="Height" Value="300"/>
<Setter Property="Width" Value="200"/>
</Style>
<Rectangle Style="{StaticResource Data}" ToolTip="Data" StrokeThickness="2">
<s:DesignerItem.DragThumbTemplate>
<ControlTemplate>
<Rectangle Style="{StaticResource Data_DragThumb}"/>
</ControlTemplate>
</s:DesignerItem.DragThumbTemplate>
</Rectangle>
При сохранении выходных данных в выходном XML-файле имеется свойство content этой формы. Теперь я хочу использовать эту же форму (точнее, ее содержимое) для создания XElement с тем же свойством содержимого. Для этого я попробовал этот:
XElement myNewItem;
... ... //assign some other property values here
Object dataShape = Application.Current.Resources["Data_DragThumb"];
myNewItem.Content = dataShape;
Но это не дает мне точных значений содержимого формы, как показано в выходном XML-файле GUI, а вместо этого просто выдает строку что-то вроде «system.windows.style». На самом деле я надеялся увидеть ту же форму при визуализации ‘myNewItem’ здесь после указания значений содержимого. Как я могу это решить? Спасибо.
Обновить
Выходной XML-файл сохраняет форму в виде данных, подобных этому:
<Content>amp;<Rectangle StrokeThickness="2" ToolTip="Data" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dd="clr-namespace:DiagramDesigner;assembly=ADAX_GUI"amp;>amp;<Rectangle.Styleamp;>amp;<Style TargetType="Rectangle"amp;>amp;<Style.BasedOnamp;>amp;<Style TargetType="Rectangle"amp;>amp;<Style.Resourcesamp;>amp;<ResourceDictionary /amp;>amp;</Style.Resourcesamp;>amp;<Setter Property="Shape.Fill"amp;>amp;<Setter.Valueamp;>amp;<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"amp;>amp;<LinearGradientBrush.GradientStopsamp;>amp;<GradientStop Color="#FFFAFBE9" Offset="0" /amp;>amp;<GradientStop Color="#FFFFA500" Offset="1" /amp;>amp;</LinearGradientBrush.GradientStopsamp;>amp;</LinearGradientBrushamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.Stroke"amp;>amp;<Setter.Valueamp;>amp;<SolidColorBrushamp;>#FFD69436amp;</SolidColorBrushamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.StrokeThickness"amp;>amp;<Setter.Valueamp;>amp;<s:Doubleamp;>1amp;</s:Doubleamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.StrokeLineJoin"amp;>amp;<Setter.Valueamp;>amp;<x:Static Member="PenLineJoin.Round" /amp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.Stretch"amp;>amp;<Setter.Valueamp;>amp;<x:Static Member="Stretch.Fill" /amp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="UIElement.IsHitTestVisible"amp;>amp;<Setter.Valueamp;>amp;<s:Booleanamp;>Falseamp;</s:Booleanamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="UIElement.SnapsToDevicePixels"amp;>amp;<Setter.Valueamp;>amp;<s:Booleanamp;>Trueamp;</s:Booleanamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;</Styleamp;>amp;</Style.BasedOnamp;>amp;<Style.Resourcesamp;>amp;<ResourceDictionary /amp;>amp;</Style.Resourcesamp;>amp;</Styleamp;>amp;</Rectangle.Styleamp;>amp;<dd:DesignerItem.DragThumbTemplateamp;>amp;<ControlTemplateamp;>amp;<Rectangle Name="DataShape" Tag="DataShapeTag"amp;>amp;<Rectangle.Styleamp;>amp;<Style TargetType="Rectangle"amp;>amp;<Style.BasedOnamp;>amp;<Style TargetType="Rectangle"amp;>amp;<Style.BasedOnamp;>amp;<Style TargetType="Rectangle"amp;>amp;<Style.Resourcesamp;>amp;<ResourceDictionary /amp;>amp;</Style.Resourcesamp;>amp;<Setter Property="Shape.Fill"amp;>amp;<Setter.Valueamp;>amp;<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"amp;>amp;<LinearGradientBrush.GradientStopsamp;>amp;<GradientStop Color="#FFFAFBE9" Offset="0" /amp;>amp;<GradientStop Color="#FFFFA500" Offset="1" /amp;>amp;</LinearGradientBrush.GradientStopsamp;>amp;</LinearGradientBrushamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.Stroke"amp;>amp;<Setter.Valueamp;>amp;<SolidColorBrushamp;>#FFD69436amp;</SolidColorBrushamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.StrokeThickness"amp;>amp;<Setter.Valueamp;>amp;<s:Doubleamp;>1amp;</s:Doubleamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.StrokeLineJoin"amp;>amp;<Setter.Valueamp;>amp;<x:Static Member="PenLineJoin.Round" /amp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="Shape.Stretch"amp;>amp;<Setter.Valueamp;>amp;<x:Static Member="Stretch.Fill" /amp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="UIElement.IsHitTestVisible"amp;>amp;<Setter.Valueamp;>amp;<s:Booleanamp;>Falseamp;</s:Booleanamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="UIElement.SnapsToDevicePixels"amp;>amp;<Setter.Valueamp;>amp;<s:Booleanamp;>Trueamp;</s:Booleanamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;</Styleamp;>amp;</Style.BasedOnamp;>amp;<Style.Resourcesamp;>amp;<ResourceDictionary /amp;>amp;</Style.Resourcesamp;>amp;</Styleamp;>amp;</Style.BasedOnamp;>amp;<Style.Resourcesamp;>amp;<ResourceDictionary /amp;>amp;</Style.Resourcesamp;>amp;<Setter Property="UIElement.IsHitTestVisible"amp;>amp;<Setter.Valueamp;>amp;<s:Booleanamp;>Trueamp;</s:Booleanamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="FrameworkElement.Height"amp;>amp;<Setter.Valueamp;>amp;<s:Doubleamp;>300amp;</s:Doubleamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="FrameworkElement.Width"amp;>amp;<Setter.Valueamp;>amp;<s:Doubleamp;>200amp;</s:Doubleamp;>amp;</Setter.Valueamp;>amp;</Setteramp;>amp;<Setter Property="FrameworkElement.Tag"amp;>amp;<Setter.Valueamp;>DataShapeamp;</Setter.Valueamp;>amp;</Setteramp;>amp;</Styleamp;>amp;</Rectangle.Styleamp;>amp;</Rectangleamp;>amp;</ControlTemplateamp;>amp;</dd:DesignerItem.DragThumbTemplateamp;>amp;</Rectangleamp;> </Content>
Я попытался получить это же значение содержимого и установить его как:
myNewItem.Content = (the above shown content)
Но у меня это не работает. Что я хочу сделать, так это в своем коде настроить содержимое вручную, используя какой-либо метод, таким образом, чтобы код генерировал точно такую же форму, какую я рисую в графическом интерфейсе.
Комментарии:
1. Вы ищете программу для чтения XAML. Однако неясно, почему вы хотите это сделать в первую очередь. Вы действительно должны хранить данные, а не пользовательский интерфейс. пользовательский интерфейс НЕ сериализуем, и вы не должны пытаться сериализовать его.
2. Я просто хочу сгенерировать ту же форму, что и в графическом интерфейсе, когда я читаю другой XML-файл. Не могли бы вы предоставить какой-либо пример кода или более подробный ответ на вашу точку зрения? Спасибо.
3.
I just want to generate the same shape as in GUI when I read another xml file
— Можете ли вы пояснить это подробнее? что находится в файле XML? вы пытаетесь сохранить пользовательский интерфейс в XML-файле? если да, то это неправильно. Вы должны использовать правильную привязку данных и хранить ДАННЫЕ в файле XML. Кроме этого, ваше требование не очень понятно для меня. Можете ли вы уточнить?4. Я храню данные в выходном XML-файле. Существует тег элемента ‘Content’, который хранит данные формы в XML-файле. Я попытался даже скопировать и вставить это содержимое данных в ‘myNewItem. Контент», но это не работает. Надеюсь, я объяснил это ясно. У вас есть какие-нибудь предложения?
5. Я обновил свой вопрос.