using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using OwlCore.AbstractUI.ViewModels; using CommunityToolkit.Diagnostics; using OwlCore.AbstractUI.Models; namespace OwlCore.WinUI.AbstractUI.Controls { /// /// The template selector used to display Abstract UI elements. Use this to define your own custom styles for each control. You may specify the existing, default styles for those you don't want to override. /// public class AbstractUICollectionItemTemplateSelector : DataTemplateSelector { /// /// Creates a new instance of . /// public AbstractUICollectionItemTemplateSelector() { if (!new Themes.AbstractTextBoxStyle().TryGetValue("DefaultAbstractTextBoxTemplate", out var textBoxTemplate)) { TextBoxTemplate = ThrowHelper.ThrowArgumentNullException(nameof(textBoxTemplate)); } if (!new Themes.AbstractDataListStyle().TryGetValue("DefaultAbstractDataListTemplate", out var dataListTemplate)) { DataListTemplate = ThrowHelper.ThrowArgumentNullException(nameof(dataListTemplate)); } if (!new Themes.AbstractButtonStyle().TryGetValue("DefaultAbstractButtonTemplate", out var buttonTemplate)) { ButtonTemplate = ThrowHelper.ThrowArgumentNullException(nameof(buttonTemplate)); } if (!new Themes.AbstractMultiChoiceStyle().TryGetValue("DefaultAbstractMultipleChoiceTemplate", out var multiChoiceTemplate)) { MultiChoiceTemplate = ThrowHelper.ThrowArgumentNullException(nameof(multiChoiceTemplate)); } if (!new Themes.AbstractBooleanStyle().TryGetValue("DefaultAbstractBooleanTemplate", out var booleanTemplate)) { BooleanTemplate = ThrowHelper.ThrowArgumentNullException(nameof(booleanTemplate)); } if (!new Themes.AbstractProgressIndicatorStyle().TryGetValue("DefaultAbstractProgressIndicatorTemplate", out var progressTemplate)) { ProgressTemplate = ThrowHelper.ThrowArgumentNullException(nameof(progressTemplate)); } TextBoxTemplate = (DataTemplate)textBoxTemplate; DataListTemplate = (DataTemplate)dataListTemplate; ButtonTemplate = (DataTemplate)buttonTemplate; MultiChoiceTemplate = (DataTemplate)multiChoiceTemplate; BooleanTemplate = (DataTemplate)booleanTemplate; ProgressTemplate = (DataTemplate)progressTemplate; } /// /// The data template used to display an . /// public DataTemplate? ElementCollection { get; set; } /// /// The data template used to display an . /// public DataTemplate TextBoxTemplate { get; set; } /// /// The data template used to display an . /// public DataTemplate DataListTemplate { get; set; } /// /// The data template used to display an . /// public DataTemplate ButtonTemplate { get; set; } /// /// The data template used to display an . /// public DataTemplate BooleanTemplate { get; set; } /// /// The data template used to display an . /// public DataTemplate ProgressTemplate { get; set; } /// /// The data template used to display an . /// public DataTemplate MultiChoiceTemplate { get; set; } /// protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { if (!new Themes.AbstractUICollectionPresenterStyle().TryGetValue("DefaultAbstractUICollectionTemplate", out var elementCollection)) ElementCollection = ThrowHelper.ThrowArgumentNullException(nameof(elementCollection)); ElementCollection = (DataTemplate)elementCollection; return item switch { AbstractTextBoxViewModel _ => TextBoxTemplate, AbstractDataListViewModel _ => DataListTemplate, AbstractButtonViewModel _ => ButtonTemplate, AbstractMultiChoiceViewModel _ => MultiChoiceTemplate, AbstractBooleanViewModel _ => BooleanTemplate, AbstractProgressIndicatorViewModel _ => ProgressTemplate, AbstractUICollectionViewModel _ => ElementCollection, _ => base.SelectTemplateCore(item, container) }; } } }