Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Silverlight 2.0测试版中导致System.ArgumentException的延迟初始化_.net_Silverlight_Silverlight 2.0 - Fatal编程技术网

.net Silverlight 2.0测试版中导致System.ArgumentException的延迟初始化

.net Silverlight 2.0测试版中导致System.ArgumentException的延迟初始化,.net,silverlight,silverlight-2.0,.net,Silverlight,Silverlight 2.0,我在一个简单的Silverlight页面中运行了以下示例: public Page() { InitializeComponent(); InitializeOther(); } private DoubleCollection dashes; public DoubleCollection Dashes { get { //dashes = new DoubleCollection(); //works ok //dashes.Add(2.0); /

我在一个简单的Silverlight页面中运行了以下示例:

public Page()
{
  InitializeComponent();
  InitializeOther();
}

private DoubleCollection dashes;

public DoubleCollection Dashes
{
  get
  {
    //dashes = new DoubleCollection(); //works ok
    //dashes.Add(2.0);
    //dashes.Add(2.0);

    if (dashes == null)
    {
      dashes = new DoubleCollection(); //causes exception
      dashes.Add(2.0);
      dashes.Add(2.0);
    }
    return dashes;
  }
  set
  {
    dashes = value;
  }
}

private void InitializeOther()
{
  Line line;
  for (int i = 0; i < 10; i++)
  {
    line = new Line();
    line.Stroke = new SolidColorBrush(Colors.Blue);
    line.StrokeDashArray = Dashes; //exception thrown here
    line.X1 = 10;
    line.Y2 = 10;
    line.X2 = 400;
    line.Y2 = 10 + (i * 40);
    canvas1.Children.Add(line);
  }
}
公共页面()
{
初始化组件();
初始化其他();
}
私人收集破折号;
公共收集破折号
{
得到
{
//破折号=新的DoubleCollection();//工作正常
//破折号。添加(2.0);
//破折号。添加(2.0);
如果(短划线==null)
{
破折号=新的DoubleCollection();//导致异常
破折号。添加(2.0);
破折号。添加(2.0);
}
返回破折号;
}
设置
{
破折号=数值;
}
}
private void InitializeOther()
{
线条;
对于(int i=0;i<10;i++)
{
行=新行();
line.Stroke=新的SolidColorBrush(Colors.Blue);
line.StrokeDashArray=Dashes;//此处引发异常
直线X1=10;
第2.Y2行=10;
line.X2=400;
line.Y2=10+(i*40);
画布1.儿童。添加(行);
}
}
上面的代码在标记的行上抛出System.ArgumentException。示例中还标记了该问题的一个解决方案


有人知道这个问题是否与属性System.Windows.Shapes.Shape.StrokeDashArray是一个依赖属性有关吗

StrokeDashArray是一个依赖属性这一事实与代码失败没有任何关系,因为在XAML中,您不断地设置在InitializeComponent解析过程中处理的依赖属性


我想说的是,问题在于,在代码中,您对每一行重复使用相同的双集合。无论何时尝试将子级设置为不同的父级,SL都会失败,并出现参数异常,这与重用非样式的资源时相同。似乎每一行都需要自己的DoubleCollection。

StrokeDashArray是一个依赖属性这一事实与代码失败没有任何关系,因为在XAML中,您不断设置依赖属性,这些属性在InitializeComponent中解析时处理


我想说的是,问题在于,在代码中,您对每一行重复使用相同的双集合。无论何时尝试将子级设置为不同的父级,SL都会失败,并出现参数异常,这与重用非样式的资源时相同。似乎每一行都需要自己的DoubleCollection。

谢谢您的回答和评论


我可以在WPF应用程序中运行完全相同的代码,并且不会失败。对我来说,这清楚地表明这是一个Silverlight bug。我现在认为这与依赖属性无关。

谢谢您的回答和评论


我可以在WPF应用程序中运行完全相同的代码,并且不会失败。对我来说,这清楚地表明这是一个Silverlight bug。我现在不认为它与依赖属性有任何关系。

我想真正的问题是,你想在这里做什么?您真的希望所有行共享同一个集合吗?显然,你可能做了很多,这只是一个很好的分享问题的方式,但你可能应该给每一行自己的收集。非常容易处理:

line = new Line();    
line.Stroke = new SolidColorBrush(Colors.Blue);
line.StrokeDashArray = **new DoubleCollection() { 2.0, 2.0 };**   
line.X1 = 10;    
...

是否确实需要在行之间共享StoreDashArray,然后将其作为类上的属性公开?我会研究其他编写代码的方法

我想真正的问题是,你想在这里做什么?您真的希望所有行共享同一个集合吗?显然,你可能做了很多,这只是一个很好的分享问题的方式,但你可能应该给每一行自己的收集。非常容易处理:

line = new Line();    
line.Stroke = new SolidColorBrush(Colors.Blue);
line.StrokeDashArray = **new DoubleCollection() { 2.0, 2.0 };**   
line.X1 = 10;    
...

是否确实需要在行之间共享StoreDashArray,然后将其作为类上的属性公开?我会研究其他编写代码的方法

发布候选1现在可用,可能值得尝试。谢谢John。据我所知,我已经安装了Silverlight 2.0的最新版本[Silverlight 2 Beta 2 GDR 1(2.0.30523.8)],发布候选版本1现在可用,可能值得一试。谢谢John。根据我安装的最新版本Silverlight 2.0[Silverlight 2 Beta 2 GDR 1(2.0.30523.8)]Mmm,我可以毫无问题地重复使用相同的刷子。尝试在上面的代码中创建一个新的笔刷属性,您将看到相同的问题不会发生。我认为这不是重用的一般问题。我认为这可能是一个错误。它与画笔一起工作,与风格一起工作;它几乎不适用于其他任何东西。我同意这应该是一个bug,因为重用DoubleCollection是有意义的,但至少这是对您的错误的最好解释。我明白了。至少我不是唯一一个经历过这一切的人!谢谢你抽出时间!嗯,我可以毫无问题地重复使用相同的刷子。尝试在上面的代码中创建一个新的笔刷属性,您将看到相同的问题不会发生。我认为这不是重用的一般问题。我认为这可能是一个错误。它与画笔一起工作,与风格一起工作;它几乎不适用于其他任何东西。我同意这应该是一个bug,因为重用DoubleCollection是有意义的,但至少这是对您的错误的最好解释。我明白了。至少我不是唯一一个经历过这一切的人!谢谢你抽出时间!嗯,正如我在最初的帖子中所说的,我意识到了另一种选择。我想关键是代码应该可以工作,但不能。从这个意义上说,我别无选择,只能研究其他的写作方式:-)好吧,正如我在最初的帖子中所说的,我意识到了另一种选择。我想关键是代码应该可以工作,但不能。从这个意义上说,我别无选择,只能研究其他的写作方式:——)