Извлечение свойств в стили (инструмент обработки Xaml) - PullRequest
0 голосов
/ 11 декабря 2011

Мне нужно извлечь реквизиты (Высота, Ширина, Горизонтальное расположение и т. Д.) Элемента управления в стиле.

Ребята, знаете ли вы какой-нибудь инструмент для этого?

Я пробовал инструменты Xaml Power (хорошо, но обрабатывает только атрибуты, подобные атрибутам XML для ex: не распознается) Также просмотрел выражение blend .. там тоже ничего не нашел.

По крайней мере, какой-то framework / api для простого разбора xaml (найден Xaml Toolkit, но он остался в CTP-версии в 2010 году ..)

Спасибо!

1 Ответ

0 голосов
/ 12 декабря 2011

Если вы создали элемент и указали свойства, такие как элемент управления Slider, ниже.

<Window x:Class="Styling.ExtractStyle"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ViewTemplateSource" Height="300" Width="300">
    <Window.Resources>
    </Window.Resources>
    <Grid Name="g1">
        <Slider Name="mySlider" Height="100" VerticalAlignment="Center">
            <Slider.Width>200</Slider.Width>
        </Slider>        
    </Grid>
</Window> 

Вы можете реализовать расширение для класса FrameworkElement ...

public static class FrameworkElementExtensions
{
    public static void SaveElementStyleToFile(this FrameworkElement element, string fileName)
    {
        if (element != null)
        {
            XmlWriterSettings settings = new XmlWriterSettings
            {
                Indent = true,
                IndentChars = new string(' ', 4),
                NewLineOnAttributes = true
            };
            StringBuilder strbuild = new StringBuilder();
            XmlWriter xmlwrite = XmlWriter.Create(strbuild, settings);
            if (xmlwrite != null)
            {
                XamlWriter.Save(element, xmlwrite);
            }
            File.WriteAllText(fileName, strbuild.ToString());
        }
        else
        {
            throw new Exception("Cannot serialize a null object");
        }
    }
}

Ивызовите метод расширения ...

mySlider.SaveElementStyleToFile("mySliderStyle.xaml");

Это даст вам XML-файл в корневом каталоге вашего приложения, который захватывает «жестко запрограммированные» свойства.Вот что он выводит ...

<?xml version="1.0" encoding="utf-16"?>
<Slider
    Name="mySlider"
    Width="200"
    Height="100"
    VerticalAlignment="Center" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />

Затем вы можете преобразовать этот файл в постоянный стиль с помощью редактора.Обратите внимание, что целевой элемент Framework должен быть сначала запущен через двухпроходную систему компоновки WPF, чтобы этот метод работал.

Например

TextBox t = new TextBox ();высота = 20;t.SaveElementStyleToFile ("myfile.xml");

будет НЕ работать по этой причине.Если не считать удобств, предлагаемых Xaml Power Toys и / или полного синтаксического анализатора Xaml, это, вероятно, будет настолько близко, насколько вы сможете удовлетворить ваши требования ...

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