System.Drawing.Point'转换为'System.Windows.Point

时间:2014-04-03 03:40:06

标签: c# wpf xaml valueconverter

我试图在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}}">

1 个答案:

答案 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