ContextItemTemplateSelector.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Diagnostics.CodeAnalysis; 6 using Microsoft.CmdPal.Core.ViewModels; 7 using Microsoft.UI.Xaml; 8 using Microsoft.UI.Xaml.Controls; 9 using Microsoft.UI.Xaml.Controls.Primitives; 10 using Microsoft.UI.Xaml.Data; 11 12 namespace Microsoft.CmdPal.UI; 13 14 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] 15 internal sealed partial class ContextItemTemplateSelector : DataTemplateSelector 16 { 17 public DataTemplate? Default { get; set; } 18 19 public DataTemplate? Critical { get; set; } 20 21 public DataTemplate? Separator { get; set; } 22 23 protected override DataTemplate? SelectTemplateCore(object item, DependencyObject dependencyObject) 24 { 25 DataTemplate? dataTemplate = Default; 26 27 if (dependencyObject is ListViewItem li) 28 { 29 li.IsEnabled = true; 30 31 if (item is SeparatorViewModel) 32 { 33 li.IsEnabled = false; 34 li.AllowFocusWhenDisabled = false; 35 li.AllowFocusOnInteraction = false; 36 dataTemplate = Separator; 37 } 38 else if (item is CommandContextItemViewModel commandItem) 39 { 40 dataTemplate = commandItem.IsCritical ? Critical : Default; 41 } 42 else 43 { 44 // Fallback for unknown types 45 dataTemplate = Default; 46 } 47 } 48 49 return dataTemplate; 50 } 51 }