Search code examples
c#wpfxamlresourcessharpvectors

How to get SharpVectors running in external XAML-File


i am trying to include XAML-Files(some styles) as Resources in my project. But i want them to be interchangable. So i dont want the Build Action "Page" but simply copy them to the output-folder and use the styles from there. I am using SharpVectors in the XAML-Files. The problem is, that if i load a style, an exception is thrown: "Can not create unknown type"{http://sharpvectors.codeplex.com/runtime/}EmbeddedBitmapSource" Maybe some reference is missing?

XAML-File:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Aufwerter"
                    xmlns:c1="clr-namespace:Aufwerter.Converter" 
                    xmlns:sys="clr-namespace:System;assembly=mscorlib"
                    xmlns:svg="http://sharpvectors.codeplex.com/runtime/"
                     >
       <Style x:Key="RevaluatorBildCashOnly" TargetType="UserControl">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Control">
                <Border>
                    <Grid>
                        <Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="1,1,1,1" x:Name="IsExpandedPath">
                            <Image.Source>
                                <DrawingImage xmlns:svg="http://sharpvectors.codeplex.com/runtime/">
                                    <DrawingImage.Drawing>
                                        <DrawingGroup ClipGeometry="M0,0 V1957 H575 V0 H0 Z">
                                            <DrawingGroup Opacity="1" Transform="1,0,0,1,6,5">
                                                <DrawingGroup.ClipGeometry>
                                                    <RectangleGeometry RadiusX="0" RadiusY="0" Rect="-6,-5,575,1957" />
                                                </DrawingGroup.ClipGeometry>
                                                <DrawingGroup Transform="1,0,0,1,-6,-5" Opacity="1">
                                                    <ImageDrawing Rect="0,0,575,1957">
                                                        <ImageDrawing.ImageSource>
                                                            <svg:EmbeddedBitmapSource Data="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" MimeType="image/png" />
                                                        </ImageDrawing.ImageSource>
                                                    </ImageDrawing>
                                                </DrawingGroup>
                                            </DrawingGroup>
                                        </DrawingGroup>
                                    </DrawingImage.Drawing>
                                </DrawingImage>
                            </Image.Source>
                        </Image>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

    <Style x:Key="RevaluatorVideoCashOnly-Cash" TargetType="UserControl">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Control">
                <ControlTemplate.Resources>
                    <Storyboard x:Key="Animation0" BeginTime="00:00:00" RepeatBehavior="Forever" Duration="00:00:02">
                        <DoubleAnimation From="1" Duration="00:00:01" Storyboard.TargetName="ellipse0" Storyboard.TargetProperty="Opacity" To="0" />
                    </Storyboard>
                </ControlTemplate.Resources>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsVisible" Value="true">
                        <Trigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource Animation0}" x:Name="Storyboard0" />
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <StopStoryboard BeginStoryboardName="Storyboard0"/>
                        </Trigger.ExitActions>
                    </Trigger>
                </ControlTemplate.Triggers>
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                    <Grid>
                        <Viewbox>
                            <Canvas Name="canvas" Height="450" Width="200">
                                <UserControl Style="{StaticResource RevaluatorBildCashOnly}" Height="{Binding ElementName=canvas, Path=ActualHeight}" Width="{Binding ElementName=canvas, Path=ActualWidth}" ></UserControl>
                                <Ellipse x:Name="ellipse0" Width="96" Height="65" Canvas.Left="52" Canvas.Top="242" StrokeThickness="6" Stroke="red" Visibility="Visible" HorizontalAlignment="Center" VerticalAlignment="Top"/>
                            </Canvas>
                        </Viewbox>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Adding Dictionary:

DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"/Resources/");
            foreach (FileInfo item in directoryInfo.GetFiles())
            {
                ResourceDictionary myResourceDictionary = new ResourceDictionary();
                myResourceDictionary.Source = new Uri(item.FullName, UriKind.Absolute);
                Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            }

View where style is used:

<Page x:Class="Aufwerter.Views.RevalueManual"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
                          xmlns:svg="http://sharpvectors.codeplex.com/runtime/"
   xmlns:sys="clr-namespace:System;assembly=mscorlib"
                  xmlns:c1="clr-namespace:Aufwerter.Converter"
        Title="MainWindow"  d:DesignHeight="1200" d:DesignWidth="1920" xmlns:prism="http://prismlibrary.com/"             
             prism:ViewModelLocator.AutoWireViewModel="True"
       xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:viewmodels="clr-namespace:Aufwerter.ViewModels" d:DataContext="{d:DesignInstance Type=viewmodels:RevalueManualViewModel}" Unloaded="Page_Unloaded">
            
<UserControl Grid.Column="1" HorizontalAlignment="Stretch" Visibility="{Binding IsMediaElementPlaceCardVisible, Converter={StaticResource BoolToVis}}">
                    <UserControl.Style>
                        <Binding Converter="{StaticResource VideoSelectorConverter }">
                            <Binding.Source>
                                <sys:String>Cash</sys:String>
                            </Binding.Source>
                        </Binding>
                    </UserControl.Style>
                </UserControl>

Converter that returns styles to Views:

return Application.Current.FindResource("RevaluatorVideoCashOnly-Cash") as Style;

How can i get this working?


Solution

  • You should inlude the actual namespace and assembly name in the loose (uncompiled) XAML, i.e. replace xmlns:svg="http://sharpvectors.codeplex.com/runtime/" with a namespace mapping for each type that you use.

    For example, for EmbeddedBitmapSource it's:

    xmlns:svg="clr-namespace:SharpVectors.Runtime;assembly=SharpVectors.Runtime.Wpf"