/ src / modules / cmdpal / Microsoft.CmdPal.UI / Converters / ContextItemTemplateSelector.cs
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  }