Пользовательские редакторы¶
Регистрация пользовательских редакторов для использования в контейнерных контролах¶
Стандартный подход к заданию встроенных редакторов в контейнерных контролах — использовать свойство EditorProperties, предоставляемое этими контейнерными контролами:
GridColumn.EditorPropertiesTreeListColumn.EditorPropertiesTreeViewControl.EditorPropertiesPropertyGridRow.EditorPropertiesToolbarEditorItem.EditorProperties
Например, следующий код назначает контрол ButtonEditor столбцу грида. Код устанавливает свойство GridColumn.EditorProperties в объект ButtonEditorProperties. В результате контрол грида автоматически создаст встроенный контрол ButtonEditor на основе заданного объекта ButtonEditorProperties, когда в этом столбце начнётся операция редактирования ячейки.
xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"
<mxdg:DataGridControl.Columns>
<mxdg:GridColumn Header="Name" FieldName="Name">
<mxdg:GridColumn.EditorProperties>
<mxe:ButtonEditorProperties>
<mxe:ButtonEditorProperties.Buttons>
<mxe:ButtonSettings Content="Clear"
Command="{Binding
$parent[mxdg:CellControl].DataControl.DataContext.ClearValueCommand}"/>
</mxe:ButtonEditorProperties.Buttons>
</mxe:ButtonEditorProperties>
</mxdg:GridColumn.EditorProperties>
</mxdg:GridColumn>
</mxdg:DataGridControl.Columns>
Чтобы позволить назначать таким образом потомки редакторов Eremex ячейкам в контейнерных контролах, сделайте следующее:
-
Создайте потомок контрола-редактора Eremex
Tip
Все редакторы Eremex являются потомками
BaseEditor. -
Создайте потомок соответствующего класса
...Properties. Например, если ваш пользовательский редактор производен от контролаButtonEditor, производите ваш класс...PropertiesотButtonEditorProperties.Tip
Все классы
...Propertiesредакторов Eremex являются потомками классаBaseEditorProperties. -
Добавьте код регистрации пользовательского редактора в статический конструктор вашего класса
...Properties. Используйте методEditorPropertiesProvider.Default.RegisterEditor, чтобы зарегистрировать редактор.
Метод EditorPropertiesProvider.Default.RegisterEditor имеет следующую сигнатуру:
void RegisterEditor(Type editor, Type editorProperties, Func<IBaseEditor> createEditorFunc, Func<BaseEditorProperties> createEditorPropertiesFunc)
editor— тип пользовательского контрола-редактора.editorProperties— тип соответствующего класса...Properties.createEditorFunc— пользовательская функция, вызываемая при создании пользовательского контрола-редактора.createEditorPropertiesFunc— пользовательская функция, вызываемая при создании пользовательского объекта...Properties.
Следующий код создаёт пользовательский контрол TextEditor. Он переопределяет формат отображения, используемый для форматирования значений редактора. Класс TextEditorWithCustomFormatProperties содержит статический конструктор, который регистрирует редактор.
using Eremex.AvaloniaUI.Controls.Editors;
public class TextEditorWithCustomFormat : TextEditor
{
protected override Type StyleKeyOverride => typeof(TextEditor);
}
public class TextEditorWithCustomFormatProperties : TextEditorProperties
{
public static string Formatter = $"Header_{{0}}";
public TextEditorWithCustomFormatProperties()
{
DisplayFormatString = Formatter;
}
static TextEditorWithCustomFormatProperties()
{
RegisterEditor();
}
static void RegisterEditor()
{
EditorPropertiesProvider.Default.RegisterEditor(typeof(TextEditorWithCustomFormat), typeof(TextEditorWithCustomFormatProperties),
() => new TextEditorWithCustomFormat(), () => new TextEditorWithCustomFormatProperties());
}
}
* Эта страница переведена с использованием технологий машинного перевода.