WPF:具有ReadOnly属性的属性未被XAML序列化

时间:2015-04-20 15:54:11

标签: xaml serialization readonly xamlwriter

我正在开发一个C#WPF应用程序,该应用程序使用Windows窗体PropertyGrid来允许用户查看和更改对象的属性。我希望某些属性可见但已锁定,因此我将其ReadOnly属性设置为true。

但是,在项目的其他地方,我们使用XAML序列化程序来序列化对象,并且发现序列化中省略了具有ReadOnly属性集的属性。

为了证明这一点:

// Simple class containing 3 properties, one of which has a ReadOnly attribute
public class TestClass
{
    public int a { get; set; }
    [ReadOnly(true)]
    public int b { get; set; }
    public int c { get; set; }
}

运行此代码:

TestClass test = new TestClass();

test.a = 1;
test.b = 2;
test.c = 3;

string xStr = XamlWriter.Save(test);

Console.WriteLine(xStr);

给出输出:

<TestClass a="1" c="3" xmlns="clr-namespace:myTest;assembly=myTest" />

显然缺少'b'属性。

这是正确的行为吗?是否可以序列化ReadOnly设置为true的属性?

1 个答案:

答案 0 :(得分:0)

如果您对您的输出可能无法反序列化感到高兴,那么您也可以通过以下方式装饰[ReadOnly(true)]属性来实现您的目标:

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]