PropertyGrid
코드를 확장하면됩니다.
다음 코드는 정수 속성으로 작업합니다. 단계별로
단계 :
1) 다운로드 소스는 https://wpftoolkit.codeplex.com/SourceControl/latest에서 WPF 툴킷을 확장.
2) 솔루션에 Xceed.Wpf.Toolkit
프로젝트를 추가하십시오.
3) 다음 네임 스페이스에 RangeAttribute
클래스를 추가 : 최소 및 최대 값을 지정하는 클래스 ObjectContainerHelperBase
에서
namespace Xceed.Wpf.Toolkit.PropertyGrid.Implementation.Attributes
{
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class RangeAttribute : Attribute
{
public RangeAttribute(int min, int max)
{
Min = min;
Max = max;
}
public int Min { get; private set; }
public int Max { get; private set; }
}
}
4) 편집 코드 편집기 (IntegerUpDown
을 appriopriate하기).
private FrameworkElement GenerateChildrenEditorElement(PropertyItem propertyItem)
{
FrameworkElement editorElement = null;
DescriptorPropertyDefinitionBase pd = propertyItem.DescriptorDefinition;
object definitionKey = null;
Type definitionKeyAsType = definitionKey as Type;
ITypeEditor editor = pd.CreateAttributeEditor();
if(editor != null)
editorElement = editor.ResolveEditor(propertyItem);
if(editorElement == null && definitionKey == null)
editorElement = this.GenerateCustomEditingElement(propertyItem.PropertyDescriptor.Name, propertyItem);
if(editorElement == null && definitionKeyAsType == null)
editorElement = this.GenerateCustomEditingElement(propertyItem.PropertyType, propertyItem);
if(editorElement == null)
{
if(pd.IsReadOnly)
editor = new TextBlockEditor();
// Fallback: Use a default type editor.
if(editor == null)
{
editor = (definitionKeyAsType != null)
? PropertyGridUtilities.CreateDefaultEditor(definitionKeyAsType, null)
: pd.CreateDefaultEditor();
}
Debug.Assert(editor != null);
editorElement = editor.ResolveEditor(propertyItem);
if(editorElement is IntegerUpDown)
{
var rangeAttribute = PropertyGridUtilities.GetAttribute<RangeAttribute>(propertyItem.DescriptorDefinition.PropertyDescriptor);
if (rangeAttribute != null)
{
IntegerUpDown integerEditor = editorElement as IntegerUpDown;
integerEditor.Minimum = rangeAttribute.Min;
integerEditor.Maximum = rangeAttribute.Max;
}
}
}
return editorElement;
}
것은 내가 구체적인 속성에 대한 속성을 사용하고자하는 의미 –
"나는 클래스 정의의 구체적인 속성의 최소/최대 범위를 정의하려면"정교하게하십시오 : 난 그냥 다음 코드를 사용하여이 방법을 대체, 전체 방법
GenerateChildrenEditorElement
을 게시 이는 속성의 최소/최대 값을 정의합니다. – Frk