私は次のコードを持っています:
<Style TargetType="{x:Type gc:EdgeControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type gc:EdgeControl}">
<Path Stroke="Black"
StrokeThickness="1"
MinWidth="1"
MinHeight="1"
ToolTip="Transition"
x:Name="edgePath">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<MultiBinding Converter="{StaticResource routeToPathConverter}">
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.(gc:GraphCanvas.X)" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.(gc:GraphCanvas.Y)" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.ActualWidth" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.ActualHeight" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Target.(gc:GraphCanvas.X)" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Target.(gc: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>
これは私にとってはうまくいきます。しかし今、テンプレートを独自のファイルにリファクタリングしたいと考えています。私は次のことを試しました:
新しいファイル FsmTransitionControl.xaml
<UserControl x:Class="LogicEditor.View.FsmTransitionControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:gc="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
xmlns:viewmodel="clr-namespace:LogicEditor.ViewModel"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<viewmodel:EdgeRouteToPathConverter x:Key="routeToPathConverter" />
</UserControl.Resources>
<Grid>
<Path Stroke="Black"
StrokeThickness="1"
MinWidth="1"
MinHeight="1"
ToolTip="Transition"
x:Name="edgePath">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<MultiBinding Converter="{StaticResource routeToPathConverter}">
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.(gc:GraphCanvas.X)" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.(gc:GraphCanvas.Y)" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.ActualWidth" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Source.ActualHeight" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Target.(gc:GraphCanvas.X)" />
<Binding RelativeSource="{RelativeSource TemplatedParent}"
Path="Target.(gc: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>
</Grid>
</UserControl>
元のファイル:
<Style TargetType="{x:Type gc:EdgeControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type gc:EdgeControl}">
<view:FsmTransitionControl DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
これは機能しません (何も表示されません)。コンパイル時にエラーは発生せず、デバッグ出力にもエラーはありませんが、IntelliSenseでは、タイプ 'Multibinding' のインスタンスをタイプ 'PathFigureCollection' のコレクションに追加できませんと表示されます。「PathFigure」タイプのアイテムのみが許可されます。Path-Object のコードが以前とまったく同じであるため、これは理解できません。
グリッドに別のコントロールを追加すると、次のようになります。
<Label Content="{Binding Source.ActualWidth}"/>)
コントロールとデータバインディングは問題なく動作します。
新しい UserControl の DataContext は問題ないようです (タイプは EdgeControl です)。
Visual Studio 2012 Update 3 を使用しています
誰でも助けることができますか?