Error when overriding Template for Edge Control

Oct 11, 2009 at 4:29 PM

Hi,

I'm getting this error when overriding the edge control template

"Cannot convert string 'Source.(Controls:GraphCanvas.X)' in attribute 'Path' to object of type 'System.Windows.PropertyPath'. 'Controls' XML namespace prefix does not map to a namespace URI, so cannot resolve property 'GraphCanvas"

 

Here is the XAML:

 

 

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:gs_controls="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
    xmlns:gs_converters="clr-namespace:GraphSharp.Converters;assembly=GraphSharp.Controls">
    <gs_converters:EdgeRouteToPathConverter x:Key="routeToPathConverter" />
    
    
    <Style TargetType="{x:Type gs_controls:EdgeControl}">
        
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type gs_controls:EdgeControl}">
                    <Path Stroke="{TemplateBinding Foreground}"
                          StrokeThickness="2"
                          MinWidth="1"
                          MinHeight="1"
                          x:Name="edgePath">
                        <Path.Data>
                            <PathGeometry>
                                <PathGeometry.Figures>
                                    <MultiBinding Converter="{StaticResource routeToPathConverter}">
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Source.(Controls:GraphCanvas.X)" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Source.(Controls:GraphCanvas.Y)" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Source.ActualWidth" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Source.ActualHeight" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Target.(Controls:GraphCanvas.X)" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Target.(Controls:GraphCanvas.Y)" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Target.ActualWidth" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="Target.ActualHeight" />
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
                                                 Path="RoutePoints" />
                                    </MultiBinding>
                                </PathGeometry.Figures>
                            </PathGeometry>
                        </Path.Data>
                    </Path>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
</ResourceDictionary>

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

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:gs_controls="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"

    xmlns:gs_converters="clr-namespace:GraphSharp.Converters;assembly=GraphSharp.Controls">

 

    <gs_converters:EdgeRouteToPathConverter x:Key="routeToPathConverter" />

 

 

    <Style TargetType="{x:Type gs_controls:EdgeControl}">

 

        <Setter Property="Template">

            <Setter.Value>

                <ControlTemplate TargetType="{x:Type gs_controls:EdgeControl}">

                    <Path Stroke="{TemplateBinding Foreground}"

                          StrokeThickness="2"

                          MinWidth="1"

                          MinHeight="1"

                          x:Name="edgePath">

                        <Path.Data>

                            <PathGeometry>

                                <PathGeometry.Figures>

                                    <MultiBinding Converter="{StaticResource routeToPathConverter}">

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Source.(Controls:GraphCanvas.X)" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Source.(Controls:GraphCanvas.Y)" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Source.ActualWidth" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Source.ActualHeight" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Target.(Controls:GraphCanvas.X)" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Target.(Controls:GraphCanvas.Y)" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Target.ActualWidth" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="Target.ActualHeight" />

                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"

                                                 Path="RoutePoints" />

                                    </MultiBinding>

                                </PathGeometry.Figures>

                            </PathGeometry>

                        </Path.Data>

                    </Path>

                </ControlTemplate>

            </Setter.Value>

        </Setter>

    </Style>

 

</ResourceDictionary>

 

Any ideas ?

 

Oct 12, 2009 at 1:18 PM

"Controls" is a namespace which in your care is called "gs_controls": change it and see what happens...

Oct 12, 2009 at 1:25 PM

Oh my god, I can't believe I missed that !

Thanks