Пользовательские редакторы¶
Зарегистрируйте пользовательские редакторы для использования в контролах-контейнерах¶
Стандартный подход к указанию встроенных редакторов в контролах-контейнерах заключается в использовании свойства 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 назначаться таким образом ячейкам в элементах контрол-контейнера, выполните следующие действия:
- 
Создайте потомок контрола редактора Eremex Совет All Eremex editors are BaseEditordescendants.
- 
Создайте потомка соответствующего класса ...Properties. Например, если ваш пользовательский редактор наследуется от контролаButtonEditor, выведите свой класс...PropertiesизButtonEditorProperties.Совет All ...Propertiesclasses of Eremex editors are descendants of theBaseEditorPropertiesclass.
- 
Добавьте регистрационный код пользовательского редактора в статический конструктор вашего класса ...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());
    }
}
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.