Skip to content

Пользовательские редакторы

Зарегистрируйте пользовательские редакторы для использования в контролах-контейнерах

Стандартный подход к указанию встроенных редакторов в контролах-контейнерах заключается в использовании свойства EditorProperties, предоставляемого этими контролами-контейнерами:

  • GridColumn.EditorProperties
  • TreeListColumn.EditorProperties
  • TreeViewControl.EditorProperties
  • PropertyGridRow.EditorProperties
  • ToolbarEditorItem.EditorProperties

Например, следующий код присваивает контрол ButtonEditor столбцу таблицы. Код присваивает свойству GridColumn.EditorProperties значение объекта ButtonEditorProperties. В результате, контрол Grid для расширенной таблицы автоматически создаст встроенный контрол 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 назначаться таким образом ячейкам в элементах контрол-контейнера, выполните следующие действия:

  1. Создайте потомок контрола редактора Eremex

    Совет

    All Eremex editors are BaseEditor descendants.

  2. Создайте потомка соответствующего класса ...Properties. Например, если ваш пользовательский редактор наследуется от контрола ButtonEditor, выведите свой класс ...Properties из ButtonEditorProperties.

    Совет

    All ...Properties classes of Eremex editors are descendants of the BaseEditorProperties class.

  3. Добавьте регистрационный код пользовательского редактора в статический конструктор вашего класса ...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());
    }
}



* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.