Используя файл XAML как векторное изображение Источник

При определении интерфейса для классов он помогает с внедрением зависимости. Ваши конфигурационные файлы Spring ничего не имеют об интерфейсах в них самих - Вы просто помещаете от имени класса.

, Но если Вы хотите ввести другой класс, который предлагает "эквивалентную" функциональность, с помощью интерфейса действительно, помогает.

, Например, говоря у Вас есть класс, который анализирует содержание веб-сайта, и Вы вводите его с Spring. Если классы, в которые Вы вводите его, знают, каков фактический класс, то для изменения его необходимо будет изменить много кода для использования различного реального класса. Но если бы Вы создали Analyzer интерфейс, Вы могли бы так легко ввести свой оригинал DefaultAnalyzer, как Вы могли копируемый DummyAnalyzer или даже другой, который делает по существу то же самое, как PageByPageAnalyzer или что-либо еще. Для использования одного из тех просто необходимо изменить имя класса, которое Вы вводите в своих файлах конфигурации Spring, вместо того, чтобы пройти Ваши классы меняющего кода.

мне потребовались приблизительно полтора с половиной, прежде чем я действительно начал видеть полноценность. Как большинство вещей (на языках предприятия), которые заканчивают тем, что были полезны, это походит на бессмысленное добавление работы сначала, пока Ваш проект не начинает расти, и затем Вы обнаруживаете сколько времени Вы сохраненный путем выполнения немного большего количества работы впереди.

19
задан Askolein 11 September 2015 в 15:43
поделиться

3 ответа

1) Add the DrawingImage.xaml to the project and set its properties to 'BuildAction=Content' and 'Copy Always'. Or else you can dynamically load the XAML from outside since the logic I am going to explain will work for loose-xaml also.

2) Write a Converter to convert the XAML uri to UIELement, in your case it will be always DrawingImage

public class FileToUIElementConverter :IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        FileStream fileStream = new FileStream((string)parameter, FileMode.Open); 
        return XamlReader.Load(fileStream) as DrawingImage;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

3) Write the XAML as below

<Window.Resources>
    <local:FileToUIElementConverter x:Key="uriToUIElementConverter"/>
</Window.Resources>
<Grid>
    <Image Stretch="Fill" Source="{Binding Converter={StaticResource uriToUIElementConverter},ConverterParameter=ImageDrawing.xaml}"/>
</Grid>
2
ответ дан 30 November 2019 в 05:01
поделиться

Вы можете просто ссылаться на свою векторную графику как на StaticResources:

<Image Source="{StaticResource MyImage}" />

Сохраняйте изображения в ResourceDictionary как DrawImage. Expression Blend может помочь вам сгенерировать этот материал:

<ResourceDictionary
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

   <DrawingImage x:Key="MyImage">
      <DrawingImage.Drawing>
         <DrawingGroup>
            <DrawingGroup.Children>
               <GeometryDrawing Brush="Black" Geometry="M 333.393,... 100.327 Z "/>
               <GeometryDrawing Brush="Black" Geometry="F1 M 202.309,... Z "/>
                      :
            </DrawingGroup.Children>
         </DrawingGroup>
     </DrawingImage.Drawing>
   </DrawingImage>

</ResourceDictionary>
14
ответ дан 30 November 2019 в 05:01
поделиться

Вставьте ресурс XAML (DrawingImage) с типом «Ресурс». Тогда это не отдельный файл, и на него можно напрямую ссылаться через URI, как в вашем исходном примере - НО URI нетривиален. Вы должны выяснить синтаксис URI пакета Microsoft и использовать его.

1
ответ дан 30 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: