【发布时间】:2015-07-19 02:31:44
【问题描述】:
编辑
这困扰了我将近一年。我会更新答案并添加赏金。
我有自定义控件,它具有依赖属性
public class Graph : Control
{
public List<Figure> Figures
{
get { return (List<Figure>)GetValue(FiguresProperty); }
set { SetValue(FiguresProperty, value); }
}
public static readonly DependencyProperty FiguresProperty =
DependencyProperty.Register("Figures", typeof(List<Figure>), typeof(Graph),
new PropertyMetadata((d, e) => ((Graph)d).InvalidateVisual()));
...
}
Figure 是所有图形的基类:
public abstract class Figure { ... }
public class LineFigure : Figure { ... }
public class XGridFigure : Figure { ... }
public class YGridFigure : Figure { ... }
...
现在看下面的截图来看看问题所在:有时(在其他地方对 xaml 进行更改后)设计者对此感到疯狂并停止渲染整个窗口,抛出异常,而代码编译和运行没有问题。我可以关闭此 xaml(设计器)并再次打开它以使问题消失。但它总是会再次出现。
问题:我这边有什么问题吗?缺少属性?错误用法?我该如何解决这个问题?
老问题
糟糕的情况。
我有 2 个UserControl。在这两个手工控制Graph 中使用。 Graph 具有属性 Figures 以指定 List<Figure>。以Figure为基数的数字有几十个。
在一个UserControl 中它工作正常,在另一个抛出异常
无法将指定的值分配给集合。以下类型应为:“Figure”。
我看不出可能导致问题的差异。
这是一张有问题的截图
这是一个工作
尽管有错误项目编译并运行,但如果我需要对有问题的UserControl 进行修改,那么它不会显示任何内容(说“无效标记”)。图表几乎相同,所有8 错误仅针对一个UserControl 显示。
我该怎么办?如何解决此类错误?我(完全)排除了Graph 的任何问题,因为它运行时没有任何问题,并且对于另一个UserControl 也没有问题。 Visual Studio 设计器问题?使用 2013 Express for Windows 桌面。
【问题讨论】:
-
控制是否与使用控制在同一个项目中?如果不是,如何添加参考?
-
你试过用 IList 代替 List 吗?此外,您可以尝试使用
FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender)而不是普通的PropertyMetadata 作为依赖属性,然后您可以摆脱整个InvalidateVisual代码。