Browse Source

restore control catalog.

pull/3909/head
Dan Walmsley 7 years ago
parent
commit
07261b61fe
  1. 69
      samples/ControlCatalog/MainWindow.xaml
  2. 87
      samples/ControlCatalog/MainWindow.xaml.cs

69
samples/ControlCatalog/MainWindow.xaml

@ -9,11 +9,68 @@
xmlns:v="clr-namespace:ControlCatalog.Views" xmlns:v="clr-namespace:ControlCatalog.Views"
x:Class="ControlCatalog.MainWindow" WindowState="{Binding WindowState, Mode=TwoWay}"> x:Class="ControlCatalog.MainWindow" WindowState="{Binding WindowState, Mode=TwoWay}">
<DockPanel> <NativeMenu.Menu>
<StackPanel DockPanel.Dock="Top"> <NativeMenu>
<Button Content="Test" /> <NativeMenuItem Header="File">
<local:TestControl1 VerticalAlignment="Stretch" Height="20" /> <NativeMenuItem.Menu>
</StackPanel> <NativeMenu>
<local:TestControl /> <NativeMenuItem Icon="/Assets/test_icon.ico" Header="Open" Clicked="OnOpenClicked" Gesture="Ctrl+O"/>
<NativeMenuItemSeperator/>
<NativeMenuItem Icon="/Assets/github_icon.png" Header="Recent">
<NativeMenuItem.Menu>
<NativeMenu/>
</NativeMenuItem.Menu>
</NativeMenuItem>
<NativeMenuItemSeperator/>
<NativeMenuItem Header="{x:Static local:MainWindow.MenuQuitHeader}"
Gesture="{x:Static local:MainWindow.MenuQuitGesture}"
Clicked="OnCloseClicked" />
</NativeMenu>
</NativeMenuItem.Menu>
</NativeMenuItem>
<NativeMenuItem Header="Edit">
<NativeMenuItem.Menu>
<NativeMenu>
<NativeMenuItem Header="Copy"/>
<NativeMenuItem Header="Paste"/>
</NativeMenu>
</NativeMenuItem.Menu>
</NativeMenuItem>
<NativeMenuItem Header="Options">
<NativeMenuItem.Menu>
<NativeMenu>
<NativeMenuItem Header="Check Me (None)"
Command="{Binding ToggleMenuItemCheckedCommand}"
ToggleType="None"
IsChecked="{Binding IsMenuItemChecked}" />
<NativeMenuItem Header="Check Me (CheckBox)"
Command="{Binding ToggleMenuItemCheckedCommand}"
ToggleType="CheckBox"
IsChecked="{Binding IsMenuItemChecked}" />
<NativeMenuItem Header="Check Me (Radio)"
Command="{Binding ToggleMenuItemCheckedCommand}"
ToggleType="Radio"
IsChecked="{Binding IsMenuItemChecked}" />
</NativeMenu>
</NativeMenuItem.Menu>
</NativeMenuItem>
</NativeMenu>
</NativeMenu.Menu>
<Window.DataTemplates>
<DataTemplate DataType="vm:NotificationViewModel">
<v:CustomNotificationView />
</DataTemplate>
</Window.DataTemplates>
<DockPanel LastChildFill="True">
<Menu Name="MainMenu" DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Exit" Command="{Binding ExitCommand}" />
</MenuItem>
<MenuItem Header="Help">
<MenuItem Header="About" Command="{Binding AboutCommand}" />
</MenuItem>
</Menu>
<local:MainView />
</DockPanel> </DockPanel>
</Window> </Window>

87
samples/ControlCatalog/MainWindow.xaml.cs

@ -1,84 +1,61 @@
using System; using System;
using System.Runtime.InteropServices;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Notifications;
using Avalonia.Input;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.Media; using ControlCatalog.ViewModels;
using Avalonia.Rendering.SceneGraph;
using Avalonia.Threading;
namespace ControlCatalog namespace ControlCatalog
{ {
public class TestControl : Control public class MainWindow : Window
{ {
private Random _r = new Random(); private WindowNotificationManager _notificationArea;
private NativeMenu _recentMenu;
private double angle = Math.PI / 8; public MainWindow()
public TestControl()
{ {
DispatcherTimer t = new DispatcherTimer(); this.InitializeComponent();
t.Interval = TimeSpan.FromSeconds(0.0125); this.AttachDevTools();
//Renderer.DrawFps = true;
//Renderer.DrawDirtyRects = Renderer.DrawFps = true;
t.Tick += (sender, e) => _notificationArea = new WindowNotificationManager(this)
{ {
angle += Math.PI / 360; Position = NotificationPosition.TopRight,
Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background); MaxItems = 3
}; };
t.Start(); DataContext = new MainWindowViewModel(_notificationArea);
} _recentMenu = ((NativeMenu.GetMenu(this).Items[0] as NativeMenuItem).Menu.Items[2] as NativeMenuItem).Menu;
public static double CalculateOppSide(double angle, double hyp)
{
return Math.Sin(angle) * hyp;
}
public static double CalculateAdjSide(double angle, double hyp) var mainMenu = this.FindControl<Menu>("MainMenu");
{ mainMenu.AttachedToVisualTree += MenuAttached;
return Math.Cos(angle) * hyp;
} }
public static string MenuQuitHeader => RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "Quit Avalonia" : "E_xit";
public static KeyGesture MenuQuitGesture => RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ?
new KeyGesture(Key.Q, KeyModifiers.Meta) :
new KeyGesture(Key.F4, KeyModifiers.Alt);
public override void Render(DrawingContext drawingContext) public void MenuAttached(object sender, VisualTreeAttachmentEventArgs e)
{ {
var lineLength = Math.Sqrt((100 * 100) + (100 * 100)); if (NativeMenu.GetIsNativeMenuExported(this) && sender is Menu mainMenu)
{
var diffX = CalculateAdjSide(angle, lineLength); mainMenu.IsVisible = false;
var diffY = CalculateOppSide(angle, lineLength); }
var p1 = new Point(400, 400);
var p2 = new Point(p1.X + diffX, p1.Y + diffY);
var pen = new Pen(Brushes.Green, 20, lineCap: PenLineCap.Square);
var boundPen = new Pen(Brushes.Black);
drawingContext.DrawLine(pen, p1, p2);
drawingContext.DrawRectangle(boundPen, LineBoundsHelper.CalculateBounds(p1, p2, pen));
//Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background);
} }
}
public class TestControl1 : Control public void OnOpenClicked(object sender, EventArgs args)
{
private Random _r = new Random();
public override void Render(DrawingContext drawingContext)
{ {
drawingContext.FillRectangle(Brushes.Red, Bounds); _recentMenu.Items.Insert(0, new NativeMenuItem("Item " + (_recentMenu.Items.Count + 1)));
} }
}
/// <summary> public void OnCloseClicked(object sender, EventArgs args)
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{ {
InitializeComponent(); Close();
} }
private void InitializeComponent() private void InitializeComponent()

Loading…
Cancel
Save