添付プロパティに配列を渡す際のVisual Studio 2010 WPFデザイナーのバグ?
まずは下の画像を見て欲しいのですが、私には理解できないエラーが発生しています。
エラー内容は、以下の通りです。
DynamicResourceExtension"でInstanceBuilderExceptionがスローされました: 予期しない String[] の子: String[] 場所 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.UpdatePropertyOrChildValue(IInstanceBuilderContext context, ViewNode viewNode, IProperty propertyKey, Int32 childIndex, DocumentNodeChangeAction action, DocumentNode valueNode) 場所 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.InstantiateChild(IInstanceBuilderContext context, ViewNode viewNode, Int32 childIndex) 場所 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.InstantiateChildren(IInstanceBuilderContext context, ViewNode viewNode, DocumentCompositeNode compositeNode, Boolean isNewInstance) 場所 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.Instantiate(IInstanceBuilderContext context, ViewNode viewNode) 場所 Microsoft.Expression.DesignModel.Core.ViewNodeManager.Instantiate(ViewNode viewNode)
再現するコードはいたってシンプルで、以下の通りです。
class SimpleClass { public static readonly DependencyProperty TestArrayProperty = DependencyProperty.RegisterAttached("TestArray", typeof(string[]), typeof(SimpleClass), new PropertyMetadata(null, new PropertyChangedCallback(TestArrayPropertyChangedCallback))); public static string[] GetTestArray(DependencyObject obj) { return (string[])obj.GetValue(TestArrayProperty); } public static void SetTestArray(DependencyObject obj, string[] value) { obj.SetValue(TestArrayProperty, value); } private static void TestArrayPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { foreach (var str in (string[])e.NewValue) System.Diagnostics.Debug.WriteLine(str); } }
<Window x:Class="WPFxArrayTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:local ="clr-namespace:WPFxArrayTest" xmlns:sys="clr-namespace:System;assembly=mscorlib" local:SimpleClass.TestArray="{DynamicResource stringArray}" > <Window.Resources> <x:Array x:Key="stringArray" Type="{x:Type sys:String}"> <sys:String>0</sys:String> <sys:String>1</sys:String> <sys:String>2</sys:String> <sys:String>3</sys:String> </x:Array> </Window.Resources> <Grid /> </Window>
コンパイルもでき、実行も正しくされますので、デザイナに何らかの問題があるのではないかと思っています。もう少し調べたり、みなさんの意見を聞いて、バグ臭ければコネクトに出そうかと思います。