Xceed 属性 网格无法完全查看或单击 Select 空值

Xceed Property Grid Can't Completely See or Click Select Null values

我正在使用具有数据绑定和 AutoGenerateProperties = true 的 Xceed PropertyGrid。我有如下所述的可为 null 的属性,这些属性会导致奇怪的 UI 行为。

网格让我可以点击值 Yes 和 No,但是 null 选择被 属性 网格稍微遮住了,不允许我点击它 select 它。如果我 select 是并使用向上箭头键我可以 select 它。 Microsoft 属性 grid full 显示空选项并允许我单击它。

我是不是做错了什么或者这是一个错误?我在 GitHub 问题中提问,但我的 issue.

没有得到回复
YesNo? _compressed;
[CategoryAttribute("Package")]
[Description("Set to 'yes' to have compressed files in the source. This attribute cannot be set for merge modules. ")]
public YesNo? Compressed { get { return _compressed; } set { _compressed = value; RaisePropertyChangedEvent("Compressed"); } }

这真的不是错误。如果您想将 default(YesNo?) 的值显示为空 stringnull 以外的值,则需要定义您希望它以某种方式显示的方式。您可以通过创建自己的自定义编辑器来做到这一点:

public class 自定义编辑器:Xceed.Wpf.Toolkit.PropertyGrid.Editors.ComboBoxEditor {

protected override IValueConverter CreateValueConverter()
{
    return new CustomValueConverter<T>();
}

protected override ComboBox CreateEditor()
{
    ComboBox comboBox = base.CreateEditor();
    FrameworkElementFactory textBlock = new FrameworkElementFactory(typeof(TextBlock));
    textBlock.SetBinding(TextBlock.TextProperty, new Binding(".") { Converter = new CustomValueConverter<T>() });
    comboBox.ItemTemplate = new DataTemplate() { VisualTree = textBlock };
    return comboBox;
}

protected override IEnumerable CreateItemsSource(Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyItem)
{
    return new string[1] { CustomValueConverter<T>.Null }
        .Concat(Enum.GetValues(typeof(T)).OfType<T>().Select(x => x.ToString()));
}

}

public class CustomValueConverter: IValueConverter { 内部常量字符串 Null = ""; public 对象转换(对象值,System.Type targetType,对象参数,CultureInfo 文化) { 如果(值==空) return空;

    return value.ToString();
}

public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture)
{
    string s = value?.ToString();
    if (s == Null)
        return null;

    return Enum.Parse(typeof(T), s);
}

}

用法:

YesNo? _compressed;
[CategoryAttribute("Package")]
[Description("Set to 'yes' to have compressed files in the source. This attribute cannot be set for merge modules. ")]
[Editor(typeof(CustomEditor<YesNo>), typeof(CustomEditor<YesNo>))]
public YesNo? Compressed { get { return _compressed; } set { _compressed = value; RaisePropertyChangedEvent("Compressed"); } }