Browse Source

implement example tray icon in control catalog with binding.

pull/6610/head
Dan Walmsley 4 years ago
parent
commit
e00a4f61ce
  1. 29
      samples/ControlCatalog/App.xaml
  2. 6
      samples/ControlCatalog/App.xaml.cs
  3. 22
      samples/ControlCatalog/ViewModels/ApplicationViewModel.cs
  4. 22
      src/Avalonia.Controls/TrayIcon.cs

29
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
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
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; }
}
}

22
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>

Loading…
Cancel
Save