Browse Source

implement example tray icon in control catalog with binding.

pull/6610/head
Dan Walmsley 5 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" <Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 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"> x:Class="ControlCatalog.App">
<TrayIcon.TrayIcons> <TrayIcon.TrayIcons>
<TrayIcons> <TrayIcons>
<TrayIcon Icon="/Assets/test_icon.ico" ToolTipText="Avalonia Tray Icon ToolTip"> <TrayIcon Icon="/Assets/test_icon.ico" ToolTipText="Avalonia Tray Icon ToolTip">
<NativeMenu.Menu> <NativeMenu.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="About" /> <NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" />
</NativeMenu> </NativeMenu>
</NativeMenu.Menu> </NativeMenu.Menu>
</TrayIcon> </TrayIcon>
</TrayIcons> </TrayIcons>
</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> </Application>

6
samples/ControlCatalog/App.xaml.cs

@ -5,11 +5,17 @@ using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.Markup.Xaml.Styling; using Avalonia.Markup.Xaml.Styling;
using Avalonia.Styling; using Avalonia.Styling;
using ControlCatalog.ViewModels;
namespace ControlCatalog namespace ControlCatalog
{ {
public class App : Application public class App : Application
{ {
public App()
{
DataContext = new ApplicationViewModel();
}
private static readonly StyleInclude DataGridFluent = new StyleInclude(new Uri("avares://ControlCatalog/Styles")) private static readonly StyleInclude DataGridFluent = new StyleInclude(new Uri("avares://ControlCatalog/Styles"))
{ {
Source = new Uri("avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml") 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; private readonly ITrayIconImpl _impl;
@ -79,12 +79,6 @@ namespace Avalonia.Controls
public static readonly AttachedProperty<TrayIcons> TrayIconsProperty public static readonly AttachedProperty<TrayIcons> TrayIconsProperty
= AvaloniaProperty.RegisterAttached<TrayIcon, Application, TrayIcons>("TrayIcons"); = 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> /// <summary>
/// Defines the <see cref="Icon"/> property. /// Defines the <see cref="Icon"/> property.
/// </summary> /// </summary>
@ -117,20 +111,6 @@ namespace Avalonia.Controls
public new ITrayIconImpl PlatformImpl => _impl; 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> /// <summary>
/// Gets or sets the icon of the TrayIcon. /// Gets or sets the icon of the TrayIcon.
/// </summary> /// </summary>

Loading…
Cancel
Save