WPF与自定义控件绑定
问题描述:
我目前正在设计一个系统(我的第一个WPF),我正在寻找将我的自定义控件的属性绑定到控件样式中设置的元素。WPF与自定义控件绑定
<Style TargetType="{x:Type c:Connection}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type c:Connection}">
<Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<Line Stroke="Red" X1="90" X2="90" Y1="90" Y2="5"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我期待将Line(X1/2 Y1/2)的元素绑定到我的Connection Control中的属性。然而,只要我添加一个连接元素(在代码中,即使没有绑定),我得到一个类型初始化错误。我的连接类如下:
public class Connection : Control
{
public Connector StartElement { get; set; }
public Connector EndElement { get; set; }
#region Properties
#endregion
}
而且我的初始化如下:Connection con = new Connection(); (然后我将它添加到画布)。
如何将坐标绑定到连接器中的点? (ex StartElement.GetXPosition());
亲切的问候 汤姆
答
你确定你正确地创建元素?
这个工作对我来说:
在Connection.cs
文件
using System.Windows.Controls;
public class Connector {
public int X { get; set; }
public int Y { get; set; }
}
public class Connection : Control {
public Connector StartElement { get; set; }
public Connector EndElement { get; set; }
}
Xaml
:
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1">
<UserControl.Resources>
<Style TargetType="{x:Type local:Connection}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Connection}">
<Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<Line Stroke="Red"
X1="{Binding StartElement.X}"
X2="{Binding EndElement.X}"
Y1="{Binding StartElement.Y}"
Y2="{Binding EndElement.Y}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Canvas x:Name="canvasElement"
Background="White" />
</UserControl>
和UserControl
后台代码:
public UserControl1() {
InitializeComponent();
Connection connectionVariable = new Connection {
StartElement = new Connector { X = 0, Y = 0 },
EndElement = new Connector { X = 300, Y = 300 }
};
canvasElement.Children.Add(connectionVariable);
Canvas.SetLeft(connectionVariable, 0);
Canvas.SetTop(connectionVariable, 0);
}
运行这个,我看到一条红色的对角线。
这听起来像我在[这个例子]中做的事情(http://stackoverflow.com/questions/15579069/graph-nodes-coordinates-evaluation/15580293#15580293) – 2013-03-25 16:28:42
什么是确切的错误你得到什么位置在你的代码中导致错误?如果你包含你的初始化代码,它会有所帮助。 – Rachel 2013-03-25 16:50:48