我试图在WPF中绘制一些实体。我的集合包含System.Drawing.Rectangle对象,当我尝试在WPF XAML中访问这些对象的位置时,我收到以下错误
无法创建默认转换器以执行单向'类型之间的转换' System.Drawing.Point'和' System.Windows.Point'。考虑使用Binding的Converter属性
我知道我必须使用一些价值转换器。你能指导我如何转换System.Drawing.Point'到'?System.Windows.Point
更新
以下代码提供了一些异常
public class PointConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
System.Windows.Point pt = (Point)(value);
return pt;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
XAML:
<PathFigure StartPoint= "{Binding BoundingRect.Location, Converter={StaticResource PointConverter}}">
答案 0 :(得分:4)
我猜你已经得到了InvalidCastException
,除非他们之间存在隐式或显式转换,否则你不能将一种类型转换为另一种类型。记住演员表是不同的,转换是不同的。以下代码会将System.Drawing.Point
转换为System.Windows.Point
,反之亦然。
public class PointConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
System.Drawing.Point dp = (System.Drawing.Point)value;
return new System.Windows.Point(dp.X, dp.Y);
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
System.Windows.Point wp = (System.Windows.Point) value;
return new System.Drawing.Point((int) wp.X, (int) wp.Y);
}
}
如果System.Drawing.Point
来自Windows窗体鼠标事件,例如点击事件,则System.Drawing.Point
无法以这种方式直接转换为System.Windows.Point
,因为每个坐标系可能不同。有关详细信息,请参阅https://stackoverflow.com/a/19790851/815724。