Как предотвратить открытие всплывающих окон Popup Editor, доступных только для чтения¶
Начиная с версии 1.2, вы можете использовать свойство ShowPopupIfReadOnly
Popup Editor, чтобы предотвратить открытие всплывающих окон для Popup Editor, доступных только для чтения.
В более ранних версиях вы могли контролировать это поведение с помощью события PopupEditor.PopupOpening
. В текущем разделе содержится более подробная информация об использовании этого события.
При привязке к столбцам, доступным только для чтения, встроенные Popup Editor (DateEditor
, ComboBoxEditor
, MemoEditor
и т.д.) по-прежнему позволяют отображать свои всплывающие окна.
Событие PopupEditor.PopupOpening
срабатывает непосредственно перед появлением всплывающего окна, позволяя вам условно отключить его — например, когда редактор привязан к столбцу, доступному только для чтения. Вы можете обработать это событие для конкретного встроенного редактора или глобально (чтобы применить логику ко всем Popup Editor в приложении).
Отключите всплывающие окна для определенного столбца, доступного только для чтения¶
- Привязать встроенный редактор к столбцу таблицы, используя свойство
GridColumn.CellTemplate
. - Обработайте событие
PopupEditor.PopupOpening
редактора, чтобы выполнять действия при отображении всплывающего окна для этого редактора.
В следующем примере столбец таблицы связан с встроенным редактором DateEditor
. Обработчик событий DateEditor.PopupOpening
отключает всплывающее окно редактора, когда столбец таблицы доступен только для чтения.
<mxdg:GridColumn FieldName="BirthDate" Width="*" MinWidth="80">
<mxdg:GridColumn.CellTemplate>
<DataTemplate>
<mxe:DateEditor x:Name="PART_Editor" PopupOpening="DateEditor_PopupOpening"/>
</DataTemplate>
</mxdg:GridColumn.CellTemplate>
</mxdg:GridColumn>
private void DateEditor_PopupOpening(object sender, OpeningPopupEventArgs e)
{
e.Cancel = (sender as PopupEditor).ReadOnly;
}
Отключите всплывающие окна для всех Popup Editor, привязанных к столбцам, доступным только для чтения¶
Вы можете использовать обработчики классов или механизм поведения для глобальной обработки событий редакторов.
Используйте обработчик класса для глобального отключения всплывающих окон для редакторов, доступных только для чтения¶
Обработчики классов в Avalonia позволяют обрабатывать события на уровне класса, а не на уровне экземпляра. Они позволяют вам подключать обработчики событий ко всем экземплярам типа контрола без ручной подписки на каждый из них.
В следующем примере добавлен обработчик класса для события PopupEditor.PopupOpening
. Этот код влияет на все потомки PopupEditor
.
public partial class MainWindow : MxWindow
{
public MainWindow()
{
InitializeComponent();
PopupEditor.PopupOpeningEvent.AddClassHandler<PopupEditor>(PopupEditor_PopupOpening);
}
private void PopupEditor_PopupOpening(object sender, OpeningPopupEventArgs e)
{
e.Cancel = (sender as PopupEditor).ReadOnly;
}
}
Используйте механизм поведения, чтобы отключить всплывающие окна для редакторов, доступных только для чтения, по всему миру¶
Этот подход требует использования пакета Avalonia.Xaml.Interactivity
, который обеспечивает реализацию шаблона поведения для Avalonia UI. Объекты Behavior
позволяют настраивать свойства и подписываться на события для всех экземпляров данного типа контрола.
Следующий код создает глобальный объект Behavior
для всех экземпляров класса PopupEditor
. Объект Behavior
обрабатывает событие PopupEditor.PopupOpening
, чтобы отключить всплывающие окна в столбцах, доступных только для чтения.
xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"
xmlns:behaviors="using:DemoCenter.Behaviors"
<UserControl.Styles>
<Style Selector=":is(mxe|PopupEditor)">
<Setter Property="Interaction.Behaviors">
<Setter.Value>
<BehaviorCollectionTemplate>
<BehaviorCollection>
<behaviors:PopupEditorReadOnlyPopupBehavior/>
</BehaviorCollection>
</BehaviorCollectionTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Styles>
using Avalonia.Xaml.Interactivity;
using Eremex.AvaloniaUI.Controls.Editors;
namespace DemoCenter.Behaviors
{
public class PopupEditorReadOnlyPopupBehavior : Behavior<PopupEditor>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.PopupOpening += AssociatedObject_PopupOpening;
}
protected override void OnDetachedFromVisualTree()
{
base.OnDetachedFromVisualTree();
AssociatedObject.PopupOpening -= AssociatedObject_PopupOpening;
}
void AssociatedObject_PopupOpening(object sender, OpeningPopupEventArgs e)
{
e.Cancel = AssociatedObject.ReadOnly;
}
}
}
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.