Просмотр исходного кода

implement example tray icon in control catalog with binding.

Dan Walmsley 4 лет назад
Родитель
Сommit
e00a4f61ce

+ 5 - 24
samples/ControlCatalog/App.xaml

@@ -1,38 +1,19 @@
 <Application xmlns="https://github.com/avaloniaui"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:vm="using:ControlCatalog.ViewModels"
+             x:DataType="vm:ApplicationViewModel"
+             x:CompileBindings="True"
              x:Class="ControlCatalog.App">
+
   <TrayIcon.TrayIcons>
     <TrayIcons>
       <TrayIcon Icon="/Assets/test_icon.ico" ToolTipText="Avalonia Tray Icon ToolTip">
         <NativeMenu.Menu>
           <NativeMenu>
-            <NativeMenuItem Header="About" />
+            <NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" />
           </NativeMenu>
         </NativeMenu.Menu>
       </TrayIcon>
     </TrayIcons>
   </TrayIcon.TrayIcons>
-  <Application.Styles>
-    <Style Selector="TextBlock.h1">
-      <Setter Property="FontSize" Value="16" />
-      <Setter Property="FontWeight" Value="Medium" />
-    </Style>
-    <Style Selector="TextBlock.h2">
-      <Setter Property="FontSize" Value="14" />
-    </Style>
-    <Style Selector="TextBlock.h3">
-      <Setter Property="FontSize" Value="12" />
-    </Style>
-    <Style Selector="Label.h1">
-      <Setter Property="FontSize" Value="16" />
-      <Setter Property="FontWeight" Value="Medium" />
-    </Style>
-    <Style Selector="Label.h2">
-      <Setter Property="FontSize" Value="14" />
-    </Style>
-    <Style Selector="Label.h3">
-      <Setter Property="FontSize" Value="12" />
-    </Style>
-    <StyleInclude Source="/SideBar.xaml"/>
-  </Application.Styles>
 </Application>

+ 6 - 0
samples/ControlCatalog/App.xaml.cs

@@ -5,11 +5,17 @@ using Avalonia.Controls.ApplicationLifetimes;
 using Avalonia.Markup.Xaml;
 using Avalonia.Markup.Xaml.Styling;
 using Avalonia.Styling;
+using ControlCatalog.ViewModels;
 
 namespace ControlCatalog
 {
     public class App : Application
     {
+        public App()
+        {
+            DataContext = new ApplicationViewModel();
+        }
+
         private static readonly StyleInclude DataGridFluent = new StyleInclude(new Uri("avares://ControlCatalog/Styles"))
         {
             Source = new Uri("avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml")

+ 22 - 0
samples/ControlCatalog/ViewModels/ApplicationViewModel.cs

@@ -0,0 +1,22 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using MiniMvvm;
+
+namespace ControlCatalog.ViewModels
+{
+    public class ApplicationViewModel : ViewModelBase
+    {
+        public ApplicationViewModel()
+        {
+            ExitCommand = MiniCommand.Create(() =>
+            {
+                if(Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime lifetime)
+                {
+                    lifetime.Shutdown();
+                }
+            });
+        }
+
+        public MiniCommand ExitCommand { get; }
+    }
+}

+ 1 - 21
src/Avalonia.Controls/TrayIcon.cs

@@ -13,7 +13,7 @@ namespace Avalonia.Controls
     {
     }
 
-    public class TrayIcon : AvaloniaObject, IDataContextProvider, INativeMenuExporterProvider, IDisposable
+    public class TrayIcon : AvaloniaObject, INativeMenuExporterProvider, IDisposable
     {
         private readonly ITrayIconImpl _impl;
 
@@ -79,12 +79,6 @@ namespace Avalonia.Controls
         public static readonly AttachedProperty<TrayIcons> TrayIconsProperty
             = AvaloniaProperty.RegisterAttached<TrayIcon, Application, TrayIcons>("TrayIcons");
 
-        /// <summary>
-        /// Defines the <see cref="DataContext"/> property.
-        /// </summary>
-        public static readonly StyledProperty<object?> DataContextProperty =
-            StyledElement.DataContextProperty.AddOwner<Application>();
-
         /// <summary>
         /// Defines the <see cref="Icon"/> property.
         /// </summary>
@@ -117,20 +111,6 @@ namespace Avalonia.Controls
 
         public new ITrayIconImpl PlatformImpl => _impl;
 
-
-        /// <summary>
-        /// Gets or sets the Applications's data context.
-        /// </summary>
-        /// <remarks>
-        /// The data context property specifies the default object that will
-        /// be used for data binding.
-        /// </remarks>
-        public object? DataContext
-        {
-            get => GetValue(DataContextProperty);
-            set => SetValue(DataContextProperty, value);
-        }
-
         /// <summary>
         /// Gets or sets the icon of the TrayIcon.
         /// </summary>