Browse Source

Merge branch 'AvaloniaUI:master' into render-loop-skpaint-cache

pull/9441/head
DJGosnell 4 years ago
committed by GitHub
parent
commit
c11514e996
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      build/BuildTargets.targets
  2. 6
      samples/BindingDemo/MainWindow.xaml
  3. 6
      samples/BindingDemo/TestItemView.xaml
  4. 1
      samples/ControlCatalog/App.xaml
  5. 15
      samples/ControlCatalog/ControlCatalog.csproj
  6. 11
      samples/ControlCatalog/DecoratedWindow.xaml
  7. 8
      samples/ControlCatalog/MainView.xaml
  8. 11
      samples/ControlCatalog/MainWindow.xaml
  9. 20
      samples/ControlCatalog/Models/StateData.cs
  10. 6
      samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml
  11. 20
      samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs
  12. 1
      samples/ControlCatalog/Pages/BorderPage.xaml
  13. 2
      samples/ControlCatalog/Pages/ButtonSpinnerPage.xaml
  14. 2
      samples/ControlCatalog/Pages/CalendarDatePickerPage.xaml
  15. 4
      samples/ControlCatalog/Pages/ColorPickerPage.xaml
  16. 8
      samples/ControlCatalog/Pages/ComboBoxPage.xaml
  17. 4
      samples/ControlCatalog/Pages/CompositionPage.axaml
  18. 6
      samples/ControlCatalog/Pages/ContextFlyoutPage.xaml
  19. 6
      samples/ControlCatalog/Pages/ContextMenuPage.xaml
  20. 6
      samples/ControlCatalog/Pages/CursorPage.xaml
  21. 30
      samples/ControlCatalog/Pages/DataGridPage.xaml
  22. 2
      samples/ControlCatalog/Pages/DateTimePickerPage.xaml
  23. 4
      samples/ControlCatalog/Pages/ExpanderPage.xaml
  24. 8
      samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml
  25. 4
      samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml.cs
  26. 4
      samples/ControlCatalog/Pages/LabelsPage.axaml
  27. 4
      samples/ControlCatalog/Pages/ListBoxPage.xaml
  28. 8
      samples/ControlCatalog/Pages/MenuPage.xaml
  29. 4
      samples/ControlCatalog/Pages/NotificationsPage.xaml
  30. 11
      samples/ControlCatalog/Pages/NumericUpDownPage.xaml
  31. 3
      samples/ControlCatalog/Pages/NumericUpDownPage.xaml.cs
  32. 2
      samples/ControlCatalog/Pages/OpenGlPage.xaml
  33. 4
      samples/ControlCatalog/Pages/PlatformInfoPage.xaml
  34. 2
      samples/ControlCatalog/Pages/ProgressBarPage.xaml
  35. 4
      samples/ControlCatalog/Pages/ScrollViewerPage.xaml
  36. 2
      samples/ControlCatalog/Pages/SliderPage.xaml
  37. 6
      samples/ControlCatalog/Pages/SplitViewPage.xaml
  38. 10
      samples/ControlCatalog/Pages/TabControlPage.xaml
  39. 32
      samples/ControlCatalog/Pages/TabControlPage.xaml.cs
  40. 10
      samples/ControlCatalog/Pages/TabStripPage.xaml
  41. 40
      samples/ControlCatalog/Pages/TabStripPage.xaml.cs
  42. 2
      samples/ControlCatalog/Pages/TextBoxPage.xaml
  43. 3
      samples/ControlCatalog/Pages/TransitioningContentControlPage.axaml
  44. 4
      samples/ControlCatalog/Pages/TreeViewPage.xaml
  45. 2
      samples/ControlCatalog/Pages/ViewboxPage.xaml
  46. 4
      samples/ControlCatalog/Pages/WindowCustomizationsPage.xaml
  47. 20
      samples/ControlCatalog/ViewModels/CursorPageViewModel.cs
  48. 44
      samples/ControlCatalog/ViewModels/ItemsRepeaterPageViewModel.cs
  49. 26
      samples/ControlCatalog/ViewModels/TabControlPageViewModel.cs
  50. 4
      samples/ControlCatalog/Views/CustomNotificationView.xaml
  51. 4
      samples/IntegrationTestApp/MainWindow.axaml
  52. 1
      samples/IntegrationTestApp/ShowWindowTest.axaml
  53. 1
      samples/MobileSandbox/App.xaml
  54. 4
      samples/MobileSandbox/MainView.xaml
  55. 8
      samples/MobileSandbox/Views/CustomNotificationView.xaml
  56. 6
      samples/RenderDemo/MainWindow.xaml
  57. 4
      samples/RenderDemo/Pages/AnimationsPage.xaml
  58. 2
      samples/RenderDemo/Pages/CustomAnimatorPage.xaml
  59. 2
      samples/RenderDemo/Pages/GlyphRunPage.xaml
  60. 2
      samples/RenderDemo/Pages/LineBoundsPage.xaml
  61. 4
      samples/RenderDemo/Pages/Transform3DPage.axaml
  62. 2
      samples/RenderDemo/Pages/TransitionsPage.xaml
  63. 6
      samples/SampleControls/HamburgerMenu/HamburgerMenu.xaml
  64. 4
      samples/VirtualizationDemo/MainWindow.xaml
  65. 5
      src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorPicker.xaml
  66. 3
      src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorPreviewer.xaml
  67. 3
      src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorSlider.xaml
  68. 3
      src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorSpectrum.xaml
  69. 5
      src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorView.xaml
  70. 3
      src/Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml
  71. 5
      src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorPicker.xaml
  72. 3
      src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorPreviewer.xaml
  73. 3
      src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorSlider.xaml
  74. 3
      src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorSpectrum.xaml
  75. 5
      src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorView.xaml
  76. 3
      src/Avalonia.Controls.ColorPicker/Themes/Simple/Simple.xaml
  77. 6
      src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
  78. 5
      src/Avalonia.Controls.DataGrid/Themes/Simple.xaml
  79. 1
      src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.axaml
  80. 2
      src/Avalonia.Diagnostics/Diagnostics/Controls/ThicknessEditor.axaml
  81. 3
      src/Avalonia.Diagnostics/Diagnostics/Screenshots/BaseRenderToStreamHandler.cs
  82. 31
      src/Avalonia.Diagnostics/Diagnostics/Screenshots/FilePickerHandler.cs
  83. 4
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs
  84. 2
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/TreePageViewModel.cs
  85. 4
      src/Avalonia.Diagnostics/Diagnostics/Views/ConsoleView.xaml
  86. 28
      src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml
  87. 2
      src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml.cs
  88. 10
      src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml
  89. 7
      src/Avalonia.Diagnostics/Diagnostics/Views/LayoutExplorerView.axaml
  90. 8
      src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml
  91. 8
      src/Avalonia.Diagnostics/Diagnostics/Views/MainWindow.xaml
  92. 7
      src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml
  93. 4
      src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml
  94. 11
      src/Avalonia.Dialogs/Internal/AvaloniaDialogsInternalViewModelBase.cs
  95. 4
      src/Avalonia.Dialogs/Internal/ChildFitter.cs
  96. 6
      src/Avalonia.Dialogs/Internal/FileSizeStringConverter.cs
  97. 4
      src/Avalonia.Dialogs/Internal/ManagedFileChooserFilterViewModel.cs
  98. 2
      src/Avalonia.Dialogs/Internal/ManagedFileChooserItemType.cs
  99. 4
      src/Avalonia.Dialogs/Internal/ManagedFileChooserItemViewModel.cs
  100. 4
      src/Avalonia.Dialogs/Internal/ManagedFileChooserNavigationItem.cs

1
build/BuildTargets.targets

@ -3,6 +3,7 @@
<AvaloniaBuildTasksLocation>$(MSBuildThisFileDirectory)\..\src\Avalonia.Build.Tasks\bin\$(Configuration)\netstandard2.0\Avalonia.Build.Tasks.dll</AvaloniaBuildTasksLocation> <AvaloniaBuildTasksLocation>$(MSBuildThisFileDirectory)\..\src\Avalonia.Build.Tasks\bin\$(Configuration)\netstandard2.0\Avalonia.Build.Tasks.dll</AvaloniaBuildTasksLocation>
<AvaloniaUseExternalMSBuild>true</AvaloniaUseExternalMSBuild> <AvaloniaUseExternalMSBuild>true</AvaloniaUseExternalMSBuild>
<AvaloniaXamlIlVerifyIl>true</AvaloniaXamlIlVerifyIl> <AvaloniaXamlIlVerifyIl>true</AvaloniaXamlIlVerifyIl>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
</PropertyGroup> </PropertyGroup>
<Import Project="$(MSBuildThisFileDirectory)\..\packages\Avalonia\AvaloniaBuildTasks.props"/> <Import Project="$(MSBuildThisFileDirectory)\..\packages\Avalonia\AvaloniaBuildTasks.props"/>
<Import Project="$(MSBuildThisFileDirectory)\..\packages\Avalonia\AvaloniaBuildTasks.targets"/> <Import Project="$(MSBuildThisFileDirectory)\..\packages\Avalonia\AvaloniaBuildTasks.targets"/>

6
samples/BindingDemo/MainWindow.xaml

@ -1,8 +1,8 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
x:Class="BindingDemo.MainWindow" x:Class="BindingDemo.MainWindow"
xmlns:vm="clr-namespace:BindingDemo.ViewModels" xmlns:vm="using:BindingDemo.ViewModels"
xmlns:local="clr-namespace:BindingDemo" xmlns:local="using:BindingDemo"
Title="AvaloniaUI Bindings Test" Title="AvaloniaUI Bindings Test"
Width="800" Width="800"
Height="600" Height="600"
@ -81,7 +81,7 @@
<TextBlock FontSize="16" Text="Multiple"/> <TextBlock FontSize="16" Text="Multiple"/>
<ListBox Items="{Binding Items}" SelectionMode="Multiple" Selection="{Binding Selection}"/> <ListBox Items="{Binding Items}" SelectionMode="Multiple" Selection="{Binding Selection}"/>
</StackPanel> </StackPanel>
<ContentControl Content="{Binding SelectedItems[0]}"> <ContentControl Content="{ReflectionBinding Selection.SelectedItems[0]}">
<ContentControl.DataTemplates> <ContentControl.DataTemplates>
<DataTemplate DataType="vm:TestItem"> <DataTemplate DataType="vm:TestItem">
<local:TestItemView></local:TestItemView> <local:TestItemView></local:TestItemView>

6
samples/BindingDemo/TestItemView.xaml

@ -1,8 +1,10 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
x:Class="BindingDemo.TestItemView"> xmlns:viewModels="using:BindingDemo.ViewModels"
x:Class="BindingDemo.TestItemView"
x:DataType="viewModels:TestItem">
<StackPanel> <StackPanel>
<TextBlock Classes="h1" Text="{Binding StringValue}"/> <TextBlock Classes="h1" Text="{Binding StringValue}"/>
<TextBox Text="{Binding Detail}" AcceptsReturn="True"/> <TextBox Text="{Binding Detail}" AcceptsReturn="True"/>
</StackPanel> </StackPanel>
</UserControl> </UserControl>

1
samples/ControlCatalog/App.xaml

@ -2,7 +2,6 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:ControlCatalog.ViewModels" xmlns:vm="using:ControlCatalog.ViewModels"
x:DataType="vm:ApplicationViewModel" x:DataType="vm:ApplicationViewModel"
x:CompileBindings="True"
Name="Avalonia ControlCatalog" Name="Avalonia ControlCatalog"
x:Class="ControlCatalog.App"> x:Class="ControlCatalog.App">
<Application.Resources> <Application.Resources>

15
samples/ControlCatalog/ControlCatalog.csproj

@ -14,9 +14,6 @@
<AvaloniaResource Include="Assets\*" /> <AvaloniaResource Include="Assets\*" />
<AvaloniaResource Include="Assets\Fonts\*" /> <AvaloniaResource Include="Assets\Fonts\*" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Remove="Pages\NativeEmbedPage.xaml" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Assets\Fonts\SourceSansPro-Bold.ttf" /> <EmbeddedResource Include="Assets\Fonts\SourceSansPro-Bold.ttf" />
<EmbeddedResource Include="Assets\Fonts\SourceSansPro-BoldItalic.ttf" /> <EmbeddedResource Include="Assets\Fonts\SourceSansPro-BoldItalic.ttf" />
@ -35,17 +32,5 @@
<ProjectReference Include="..\SampleControls\ControlSamples.csproj" /> <ProjectReference Include="..\SampleControls\ControlSamples.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AvaloniaResource Update="Pages\NativeEmbedPage.xaml">
<Generator>MSBuild:Compile</Generator>
</AvaloniaResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Pages\NativeEmbedPage.xaml.cs">
<DependentUpon>%(Filename)</DependentUpon>
</Compile>
</ItemGroup>
<Import Project="..\..\build\BuildTargets.targets" /> <Import Project="..\..\build\BuildTargets.targets" />
</Project> </Project>

11
samples/ControlCatalog/DecoratedWindow.xaml

@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.DecoratedWindow" x:Class="ControlCatalog.DecoratedWindow"
Title="Avalonia Control Gallery" Title="Avalonia Control Gallery"
xmlns:local="clr-namespace:ControlCatalog" SystemDecorations="None" Name="Window"> SystemDecorations="None" Name="Window">
<NativeMenu.Menu> <NativeMenu.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="Decorated"> <NativeMenuItem Header="Decorated">
@ -43,8 +43,13 @@
<StackPanel> <StackPanel>
<TextBlock>Hello world!</TextBlock> <TextBlock>Hello world!</TextBlock>
<CheckBox IsChecked="{Binding ElementName=Window, Path=HasSystemDecorations}">Decorated</CheckBox> <ComboBox SelectedItem="{Binding ElementName=Window, Path=SystemDecorations}">
<ComboBox.Items>
<SystemDecorations>None</SystemDecorations>
<SystemDecorations>BorderOnly</SystemDecorations>
<SystemDecorations>Full</SystemDecorations>
</ComboBox.Items>
</ComboBox>
<CheckBox IsChecked="{Binding ElementName=Window, Path=CanResize}">CanResize</CheckBox> <CheckBox IsChecked="{Binding ElementName=Window, Path=CanResize}">CanResize</CheckBox>
</StackPanel> </StackPanel>
</Border> </Border>

8
samples/ControlCatalog/MainView.xaml

@ -1,9 +1,11 @@
<UserControl x:Class="ControlCatalog.MainView" <UserControl x:Class="ControlCatalog.MainView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:ControlSamples;assembly=ControlSamples" xmlns:controls="using:ControlSamples"
xmlns:models="clr-namespace:ControlCatalog.Models" xmlns:models="using:ControlCatalog.Models"
xmlns:pages="clr-namespace:ControlCatalog.Pages"> xmlns:pages="using:ControlCatalog.Pages"
xmlns:viewModels="using:ControlCatalog.ViewModels"
x:DataType="viewModels:MainWindowViewModel">
<Grid> <Grid>
<Grid.Styles> <Grid.Styles>
<Style Selector="TextBlock.h2"> <Style Selector="TextBlock.h2">

11
samples/ControlCatalog/MainWindow.xaml

@ -1,19 +1,20 @@
<Window xmlns="https://github.com/avaloniaui" MinWidth="500" MinHeight="300" <Window xmlns="https://github.com/avaloniaui" MinWidth="500" MinHeight="300"
Width="1024" Height="800" Width="1024" Height="800"
xmlns:pages="clr-namespace:ControlCatalog.Pages" xmlns:pages="using:ControlCatalog.Pages"
Title="Avalonia Control Gallery" Title="Avalonia Control Gallery"
Icon="/Assets/test_icon.ico" Icon="/Assets/test_icon.ico"
xmlns:local="clr-namespace:ControlCatalog" xmlns:local="using:ControlCatalog"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ControlCatalog.ViewModels" xmlns:vm="clr-namespace:ControlCatalog.ViewModels;assembly=ControlCatalog"
xmlns:v="clr-namespace:ControlCatalog.Views" xmlns:v="using:ControlCatalog.Views"
ExtendClientAreaToDecorationsHint="{Binding ExtendClientAreaEnabled}" ExtendClientAreaToDecorationsHint="{Binding ExtendClientAreaEnabled}"
ExtendClientAreaChromeHints="{Binding ChromeHints}" ExtendClientAreaChromeHints="{Binding ChromeHints}"
ExtendClientAreaTitleBarHeightHint="{Binding TitleBarHeight}" ExtendClientAreaTitleBarHeightHint="{Binding TitleBarHeight}"
TransparencyLevelHint="{Binding TransparencyLevel}" TransparencyLevelHint="{Binding TransparencyLevel}"
x:Name="MainWindow" x:Name="MainWindow"
Background="Transparent" Background="Transparent"
x:Class="ControlCatalog.MainWindow" WindowState="{Binding WindowState, Mode=TwoWay}"> x:Class="ControlCatalog.MainWindow" WindowState="{Binding WindowState, Mode=TwoWay}"
x:DataType="vm:MainWindowViewModel">
<NativeMenu.Menu> <NativeMenu.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="File"> <NativeMenuItem Header="File">

20
samples/ControlCatalog/Models/StateData.cs

@ -0,0 +1,20 @@
namespace ControlCatalog.Models;
public class StateData
{
public string Name { get; private set; }
public string Abbreviation { get; private set; }
public string Capital { get; private set; }
public StateData(string name, string abbreviatoin, string capital)
{
Name = name;
Abbreviation = abbreviatoin;
Capital = capital;
}
public override string ToString()
{
return Name;
}
}

6
samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml

@ -2,8 +2,8 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sys="using:System"
xmlns:sys="clr-namespace:System;assembly=netstandard" xmlns:models="using:ControlCatalog.Models"
d:DesignHeight="600" d:DesignHeight="600"
d:DesignWidth="400"> d:DesignWidth="400">
<StackPanel Orientation="Vertical" <StackPanel Orientation="Vertical"
@ -45,7 +45,7 @@
<StackPanel> <StackPanel>
<TextBlock Text="ValueMemberBinding" /> <TextBlock Text="ValueMemberBinding" />
<AutoCompleteBox ValueMemberBinding="{Binding Capital}" /> <AutoCompleteBox ValueMemberBinding="{Binding Capital, x:DataType=models:StateData}" />
</StackPanel> </StackPanel>
<StackPanel> <StackPanel>
<TextBlock Text="Multi-Binding" /> <TextBlock Text="Multi-Binding" />

20
samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs

@ -8,30 +8,12 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Data.Converters; using Avalonia.Data.Converters;
using Avalonia.Data; using Avalonia.Data;
using ControlCatalog.Models;
namespace ControlCatalog.Pages namespace ControlCatalog.Pages
{ {
public class AutoCompleteBoxPage : UserControl public class AutoCompleteBoxPage : UserControl
{ {
public class StateData
{
public string Name { get; private set; }
public string Abbreviation { get; private set; }
public string Capital { get; private set; }
public StateData(string name, string abbreviatoin, string capital)
{
Name = name;
Abbreviation = abbreviatoin;
Capital = capital;
}
public override string ToString()
{
return Name;
}
}
private StateData[] BuildAllStates() private StateData[] BuildAllStates()
{ {
return new StateData[] return new StateData[]

1
samples/ControlCatalog/Pages/BorderPage.xaml

@ -1,7 +1,6 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="800" d:DesignHeight="800"
d:DesignWidth="400" d:DesignWidth="400"
x:Class="ControlCatalog.Pages.BorderPage"> x:Class="ControlCatalog.Pages.BorderPage">

2
samples/ControlCatalog/Pages/ButtonSpinnerPage.xaml

@ -1,7 +1,7 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.ButtonSpinnerPage" x:Class="ControlCatalog.Pages.ButtonSpinnerPage"
xmlns:sys="clr-namespace:System;assembly=netstandard"> xmlns:sys="using:System">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">The ButtonSpinner control allows you to add button spinners to any element and then respond to the Spin event to manipulate that element.</TextBlock> <TextBlock Classes="h2">The ButtonSpinner control allows you to add button spinners to any element and then respond to the Spin event to manipulate that element.</TextBlock>

2
samples/ControlCatalog/Pages/CalendarDatePickerPage.xaml

@ -1,6 +1,6 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl 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="clr-namespace:ControlCatalog.ViewModels" xmlns:vm="using:ControlCatalog.ViewModels"
x:DataType="vm:MainWindowViewModel" x:DataType="vm:MainWindowViewModel"
x:Class="ControlCatalog.Pages.CalendarDatePickerPage"> x:Class="ControlCatalog.Pages.CalendarDatePickerPage">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">

4
samples/ControlCatalog/Pages/ColorPickerPage.xaml

@ -2,9 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:Avalonia.Controls;assembly=Avalonia.Controls.ColorPicker" xmlns:controls="using:Avalonia.Controls"
xmlns:primitives="clr-namespace:Avalonia.Controls.Primitives;assembly=Avalonia.Controls"
xmlns:pc="clr-namespace:Avalonia.Controls.Primitives.Converters;assembly=Avalonia.Controls.ColorPicker"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignWidth="800" d:DesignWidth="800"
d:DesignHeight="450" d:DesignHeight="450"

8
samples/ControlCatalog/Pages/ComboBoxPage.xaml

@ -3,7 +3,9 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:col="using:System.Collections" xmlns:col="using:System.Collections"
xmlns:sys="using:System"> xmlns:sys="using:System"
xmlns:viewModels="using:ControlCatalog.ViewModels"
x:DataType="viewModels:ComboBoxPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">A drop-down list.</TextBlock> <TextBlock Classes="h2">A drop-down list.</TextBlock>
@ -39,7 +41,7 @@
</col:ArrayList> </col:ArrayList>
</ComboBox.Items> </ComboBox.Items>
<ComboBox.ItemTemplate> <ComboBox.ItemTemplate>
<DataTemplate> <DataTemplate x:DataType="sys:String">
<Panel> <Panel>
<TextBlock Text="{Binding}" /> <TextBlock Text="{Binding}" />
<TextBlock IsVisible="{Binding Converter={x:Static ObjectConverters.IsNull}}" Text="Null object" /> <TextBlock IsVisible="{Binding Converter={x:Static ObjectConverters.IsNull}}" Text="Null object" />
@ -71,7 +73,7 @@
SelectedIndex="0" SelectedIndex="0"
WrapSelection="{Binding WrapSelection}"> WrapSelection="{Binding WrapSelection}">
<ComboBox.ItemTemplate> <ComboBox.ItemTemplate>
<DataTemplate> <DataTemplate x:DataType="FontFamily">
<TextBlock FontFamily="{Binding}" Text="{Binding Name}" /> <TextBlock FontFamily="{Binding}" Text="{Binding Name}" />
</DataTemplate> </DataTemplate>
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>

4
samples/ControlCatalog/Pages/CompositionPage.axaml

@ -1,6 +1,6 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pages="clr-namespace:ControlCatalog.Pages" xmlns:pages="using:ControlCatalog.Pages"
x:Class="ControlCatalog.Pages.CompositionPage"> x:Class="ControlCatalog.Pages.CompositionPage">
<StackPanel> <StackPanel>
<TextBlock Classes="h1">Implicit animations</TextBlock> <TextBlock Classes="h1">Implicit animations</TextBlock>
@ -42,4 +42,4 @@
</StackPanel> </StackPanel>
</UserControl> </UserControl>

6
samples/ControlCatalog/Pages/ContextFlyoutPage.xaml

@ -3,9 +3,11 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="using:ControlCatalog.ViewModels"
d:DesignHeight="450" d:DesignHeight="450"
d:DesignWidth="800" d:DesignWidth="800"
mc:Ignorable="d"> mc:Ignorable="d"
x:DataType="viewModels:ContextPageViewModel">
<UserControl.Styles> <UserControl.Styles>
<Style Selector="FlyoutPresenter.NoPadding"> <Style Selector="FlyoutPresenter.NoPadding">
<Setter Property="Padding" Value="0" /> <Setter Property="Padding" Value="0" />
@ -57,7 +59,7 @@
</Border> </Border>
<Border Classes="context-target"> <Border Classes="context-target">
<Border.Styles> <Border.Styles>
<Style Selector="MenuFlyoutPresenter MenuItem"> <Style Selector="MenuFlyoutPresenter MenuItem" x:DataType="viewModels:MenuItemViewModel">
<Setter Property="Header" Value="{Binding Header}"/> <Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Items" Value="{Binding Items}"/> <Setter Property="Items" Value="{Binding Items}"/>
<Setter Property="Command" Value="{Binding Command}"/> <Setter Property="Command" Value="{Binding Command}"/>

6
samples/ControlCatalog/Pages/ContextMenuPage.xaml

@ -1,6 +1,8 @@
<UserControl x:Class="ControlCatalog.Pages.ContextMenuPage" <UserControl x:Class="ControlCatalog.Pages.ContextMenuPage"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels="using:ControlCatalog.ViewModels"
x:DataType="viewModels:ContextPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">A right click menu that can be applied to any control.</TextBlock> <TextBlock Classes="h2">A right click menu that can be applied to any control.</TextBlock>
@ -47,7 +49,7 @@
</Border> </Border>
<Border> <Border>
<Border.Styles> <Border.Styles>
<Style Selector="ContextMenu MenuItem"> <Style Selector="ContextMenu MenuItem" x:DataType="viewModels:MenuItemViewModel">
<Setter Property="Header" Value="{Binding Header}"/> <Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Items" Value="{Binding Items}"/> <Setter Property="Items" Value="{Binding Items}"/>
<Setter Property="Command" Value="{Binding Command}"/> <Setter Property="Command" Value="{Binding Command}"/>

6
samples/ControlCatalog/Pages/CursorPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.CursorPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.CursorPage"
x:DataType="viewModels:CursorPageViewModel">
<Grid ColumnDefinitions="*,*" RowDefinitions="Auto,*"> <Grid ColumnDefinitions="*,*" RowDefinitions="Auto,*">
<StackPanel Grid.ColumnSpan="2" Orientation="Vertical" Spacing="4"> <StackPanel Grid.ColumnSpan="2" Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">Defines a cursor (mouse pointer)</TextBlock> <TextBlock Classes="h2">Defines a cursor (mouse pointer)</TextBlock>
@ -9,7 +11,7 @@
<ListBox Grid.Row="1" Items="{Binding StandardCursors}" Margin="0 8 8 8"> <ListBox Grid.Row="1" Items="{Binding StandardCursors}" Margin="0 8 8 8">
<ListBox.Styles> <ListBox.Styles>
<Style Selector="ListBoxItem"> <Style Selector="ListBoxItem">
<Setter Property="Cursor" Value="{Binding Cursor}"/> <Setter Property="Cursor" Value="{Binding Cursor}" x:DataType="viewModels:StandardCursorModel"/>
</Style> </Style>
</ListBox.Styles> </ListBox.Styles>
<ListBox.ItemTemplate> <ListBox.ItemTemplate>

30
samples/ControlCatalog/Pages/DataGridPage.xaml

@ -4,13 +4,13 @@
x:Class="ControlCatalog.Pages.DataGridPage"> x:Class="ControlCatalog.Pages.DataGridPage">
<UserControl.Resources> <UserControl.Resources>
<local:GDPValueConverter x:Key="GDPConverter" /> <local:GDPValueConverter x:Key="GDPConverter" />
<DataTemplate x:Key="Demo.DataTemplates.CountryHeader"> <DataTemplate x:Key="Demo.DataTemplates.CountryHeader" x:DataType="local:Country">
<StackPanel Orientation="Horizontal" Spacing="5"> <StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Height="12" Data="M 255 116 A 1 1 0 0 0 254 117 L 254 130 A 1 1 0 0 0 255 131 A 1 1 0 0 0 256 130 L 256 123.87109 C 256.1125 123.90694 256.2187 123.94195 256.33984 123.97852 C 257.18636 124.23404 258.19155 124.5 259 124.5 C 259.80845 124.5 260.52133 124.2168 261.17773 123.9668 C 261.83414 123.7168 262.43408 123.5 263 123.5 C 263.56592 123.5 264.5612 123.73404 265.37109 123.97852 C 266.18098 124.22299 266.82227 124.4668 266.82227 124.4668 A 0.50005 0.50005 0 0 0 267.5 124 L 267.5 118 A 0.50005 0.50005 0 0 0 267.17773 117.5332 C 267.17773 117.5332 266.50667 117.27701 265.66016 117.02148 C 264.81364 116.76596 263.80845 116.5 263 116.5 C 262.19155 116.5 261.47867 116.7832 260.82227 117.0332 C 260.16586 117.2832 259.56592 117.5 259 117.5 C 258.43408 117.5 257.4388 117.26596 256.62891 117.02148 C 256.39123 116.94974 256.17716 116.87994 255.98047 116.81445 A 1 1 0 0 0 255 116 z M 263 117.5 C 263.56592 117.5 264.5612 117.73404 265.37109 117.97852 C 266.00097 118.16865 266.29646 118.28239 266.5 118.35742 L 266.5 120.29297 C 266.25708 120.21012 265.97978 120.11797 265.66016 120.02148 C 264.81364 119.76596 263.80845 119.5 263 119.5 C 262.19155 119.5 261.47867 119.7832 260.82227 120.0332 C 260.16586 120.2832 259.56592 120.5 259 120.5 C 258.43408 120.5 257.4388 120.26596 256.62891 120.02148 C 256.39971 119.9523 256.19148 119.88388 256 119.82031 L 256 117.87109 C 256.1125 117.90694 256.2187 117.94195 256.33984 117.97852 C 257.18636 118.23404 258.19155 118.5 259 118.5 C 259.80845 118.5 260.52133 118.2168 261.17773 117.9668 C 261.83414 117.7168 262.43408 117.5 263 117.5 z M 263 120.5 C 263.56592 120.5 264.5612 120.73404 265.37109 120.97852 C 265.8714 121.12954 266.2398 121.25641 266.5 121.34961 L 266.5 123.30469 C 266.22286 123.20649 266.12863 123.1629 265.66016 123.02148 C 264.81364 122.76596 263.80845 122.5 263 122.5 C 262.19155 122.5 261.47867 122.7832 260.82227 123.0332 C 260.16586 123.2832 259.56592 123.5 259 123.5 C 258.43408 123.5 257.4388 123.26596 256.62891 123.02148 C 256.39971 122.9523 256.19148 122.88388 256 122.82031 L 256 120.87109 C 256.1125 120.90694 256.2187 120.94195 256.33984 120.97852 C 257.18636 121.23404 258.19155 121.5 259 121.5 C 259.80845 121.5 260.52133 121.2168 261.17773 120.9668 C 261.83414 120.7168 262.43408 120.5 263 120.5 z" /> <PathIcon Height="12" Data="M 255 116 A 1 1 0 0 0 254 117 L 254 130 A 1 1 0 0 0 255 131 A 1 1 0 0 0 256 130 L 256 123.87109 C 256.1125 123.90694 256.2187 123.94195 256.33984 123.97852 C 257.18636 124.23404 258.19155 124.5 259 124.5 C 259.80845 124.5 260.52133 124.2168 261.17773 123.9668 C 261.83414 123.7168 262.43408 123.5 263 123.5 C 263.56592 123.5 264.5612 123.73404 265.37109 123.97852 C 266.18098 124.22299 266.82227 124.4668 266.82227 124.4668 A 0.50005 0.50005 0 0 0 267.5 124 L 267.5 118 A 0.50005 0.50005 0 0 0 267.17773 117.5332 C 267.17773 117.5332 266.50667 117.27701 265.66016 117.02148 C 264.81364 116.76596 263.80845 116.5 263 116.5 C 262.19155 116.5 261.47867 116.7832 260.82227 117.0332 C 260.16586 117.2832 259.56592 117.5 259 117.5 C 258.43408 117.5 257.4388 117.26596 256.62891 117.02148 C 256.39123 116.94974 256.17716 116.87994 255.98047 116.81445 A 1 1 0 0 0 255 116 z M 263 117.5 C 263.56592 117.5 264.5612 117.73404 265.37109 117.97852 C 266.00097 118.16865 266.29646 118.28239 266.5 118.35742 L 266.5 120.29297 C 266.25708 120.21012 265.97978 120.11797 265.66016 120.02148 C 264.81364 119.76596 263.80845 119.5 263 119.5 C 262.19155 119.5 261.47867 119.7832 260.82227 120.0332 C 260.16586 120.2832 259.56592 120.5 259 120.5 C 258.43408 120.5 257.4388 120.26596 256.62891 120.02148 C 256.39971 119.9523 256.19148 119.88388 256 119.82031 L 256 117.87109 C 256.1125 117.90694 256.2187 117.94195 256.33984 117.97852 C 257.18636 118.23404 258.19155 118.5 259 118.5 C 259.80845 118.5 260.52133 118.2168 261.17773 117.9668 C 261.83414 117.7168 262.43408 117.5 263 117.5 z M 263 120.5 C 263.56592 120.5 264.5612 120.73404 265.37109 120.97852 C 265.8714 121.12954 266.2398 121.25641 266.5 121.34961 L 266.5 123.30469 C 266.22286 123.20649 266.12863 123.1629 265.66016 123.02148 C 264.81364 122.76596 263.80845 122.5 263 122.5 C 262.19155 122.5 261.47867 122.7832 260.82227 123.0332 C 260.16586 123.2832 259.56592 123.5 259 123.5 C 258.43408 123.5 257.4388 123.26596 256.62891 123.02148 C 256.39971 122.9523 256.19148 122.88388 256 122.82031 L 256 120.87109 C 256.1125 120.90694 256.2187 120.94195 256.33984 120.97852 C 257.18636 121.23404 258.19155 121.5 259 121.5 C 259.80845 121.5 260.52133 121.2168 261.17773 120.9668 C 261.83414 120.7168 262.43408 120.5 263 120.5 z" />
<TextBlock Text="{Binding}"/> <TextBlock Text="{Binding}"/>
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
<ControlTheme x:Key="GdpCell" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> <ControlTheme x:Key="GdpCell" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}" x:DataType="local:Country">
<Setter Property="Background" Value="{Binding Path=GDP, Mode=OneWay, Converter={StaticResource GDPConverter}}" /> <Setter Property="Background" Value="{Binding Path=GDP, Mode=OneWay, Converter={StaticResource GDPConverter}}" />
</ControlTheme> </ControlTheme>
</UserControl.Resources> </UserControl.Resources>
@ -49,15 +49,15 @@
AlternatingRowBackground="#1fff"> AlternatingRowBackground="#1fff">
<DataGrid.Columns> <DataGrid.Columns>
<!-- Using HeaderTemplate --> <!-- Using HeaderTemplate -->
<DataGridTextColumn Header="Country" HeaderTemplate="{StaticResource Demo.DataTemplates.CountryHeader}" Binding="{Binding Name}" Width="6*" /> <DataGridTextColumn Header="Country" HeaderTemplate="{StaticResource Demo.DataTemplates.CountryHeader}" Binding="{Binding Name}" Width="6*" x:DataType="local:Country" />
<!-- CompiledBinding example of usage. -->
<DataGridTextColumn Header="Region" Binding="{CompiledBinding Region}" Width="4*" x:DataType="local:Country" /> <DataGridTextColumn Header="Region" Binding="{CompiledBinding Region}" Width="4*" x:DataType="local:Country" />
<DataGridTextColumn Header="Population" Binding="{Binding Population}" Width="3*" /> <DataGridTextColumn Header="Population" Binding="{Binding Population}" Width="3*" x:DataType="local:Country" />
<DataGridTextColumn Header="Area" Binding="{Binding Area}" Width="3*" /> <DataGridTextColumn Header="Area" Binding="{Binding Area}" Width="3*" x:DataType="local:Country" />
<DataGridTextColumn Header="GDP" Binding="{Binding GDP}" Width="3*" <DataGridTextColumn Header="GDP" Binding="{Binding GDP}" Width="3*"
CellTheme="{StaticResource GdpCell}" CellTheme="{StaticResource GdpCell}"
MinWidth="200" MinWidth="200"
IsVisible="{Binding #ShowGDP.IsChecked}"/> IsVisible="{Binding #ShowGDP.IsChecked}"
x:DataType="local:Country" />
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</DockPanel> </DockPanel>
@ -65,11 +65,11 @@
<TabItem Header="Grouping"> <TabItem Header="Grouping">
<DataGrid Name="dataGridGrouping" Margin="12"> <DataGrid Name="dataGridGrouping" Margin="12">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="Country" Binding="{Binding Name}" Width="6*" /> <DataGridTextColumn Header="Country" Binding="{Binding Name}" Width="6*" x:DataType="local:Country" />
<DataGridTextColumn Header="Region" Binding="{Binding Region}" Width="4*" /> <DataGridTextColumn Header="Region" Binding="{Binding Region}" Width="4*" x:DataType="local:Country" />
<DataGridTextColumn DisplayIndex="3" Header="Population" Binding="{Binding Population}" Width="3*" /> <DataGridTextColumn DisplayIndex="3" Header="Population" Binding="{Binding Population}" Width="3*" x:DataType="local:Country" />
<DataGridTextColumn DisplayIndex="2" Header="Area" Binding="{Binding Area}" Width="3*" /> <DataGridTextColumn DisplayIndex="2" Header="Area" Binding="{Binding Area}" Width="3*" x:DataType="local:Country" />
<DataGridTextColumn Header="GDP" Binding="{Binding GDP}" Width="3*" /> <DataGridTextColumn Header="GDP" Binding="{Binding GDP}" Width="3*" x:DataType="local:Country" />
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</TabItem> </TabItem>
@ -77,9 +77,9 @@
<Grid RowDefinitions="*,Auto"> <Grid RowDefinitions="*,Auto">
<DataGrid Name="dataGridEdit" Margin="12" Grid.Row="0"> <DataGrid Name="dataGridEdit" Margin="12" Grid.Row="0">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" Width="2*" FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}" /> <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" Width="2*" FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}" x:DataType="local:Person" />
<DataGridTextColumn Header="Last" Binding="{Binding LastName}" Width="2*" FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}" /> <DataGridTextColumn Header="Last" Binding="{Binding LastName}" Width="2*" FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}" x:DataType="local:Person" />
<DataGridCheckBoxColumn Header="Is Banned" Binding="{Binding IsBanned}" Width="*" IsThreeState="{Binding #IsThreeStateCheckBox.IsChecked, Mode=OneWay}" /> <DataGridCheckBoxColumn Header="Is Banned" Binding="{Binding IsBanned}" Width="*" IsThreeState="{Binding #IsThreeStateCheckBox.IsChecked, Mode=OneWay}" x:DataType="local:Person" />
<DataGridTemplateColumn Header="Age" > <DataGridTemplateColumn Header="Age" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="local:Person"> <DataTemplate DataType="local:Person">

2
samples/ControlCatalog/Pages/DateTimePickerPage.xaml

@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=netstandard" xmlns:sys="using:System"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="ControlCatalog.Pages.DateTimePickerPage"> x:Class="ControlCatalog.Pages.DateTimePickerPage">
<StackPanel Orientation="Vertical" Spacing="4" HorizontalAlignment="Stretch"> <StackPanel Orientation="Vertical" Spacing="4" HorizontalAlignment="Stretch">

4
samples/ControlCatalog/Pages/ExpanderPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.ExpanderPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.ExpanderPage"
x:DataType="viewModels:ExpanderPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">Expands to show nested content</TextBlock> <TextBlock Classes="h2">Expands to show nested content</TextBlock>

8
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.ItemsRepeaterPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.ItemsRepeaterPage"
x:DataType="viewModels:ItemsRepeaterPageViewModel">
<UserControl.Styles> <UserControl.Styles>
<Style Selector="ItemsRepeater TextBlock.oddTemplate"> <Style Selector="ItemsRepeater TextBlock.oddTemplate">
<Setter Property="Background" Value="Yellow" /> <Setter Property="Background" Value="Yellow" />
@ -21,12 +23,12 @@
</UserControl.Styles> </UserControl.Styles>
<UserControl.Resources> <UserControl.Resources>
<RecyclePool x:Key="RecyclePool" /> <RecyclePool x:Key="RecyclePool" />
<DataTemplate x:Key="odd"> <DataTemplate x:Key="odd" x:DataType="viewModels:ItemsRepeaterPageViewModelItem">
<TextBlock Classes="oddTemplate" <TextBlock Classes="oddTemplate"
Height="{Binding Height}" Height="{Binding Height}"
Text="{Binding Text}"/> Text="{Binding Text}"/>
</DataTemplate> </DataTemplate>
<DataTemplate x:Key="even"> <DataTemplate x:Key="even" x:DataType="viewModels:ItemsRepeaterPageViewModelItem">
<TextBlock Classes="evenTemplate" <TextBlock Classes="evenTemplate"
Height="{Binding Height}" Height="{Binding Height}"
Text="{Binding Text}"/> Text="{Binding Text}"/>

4
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml.cs

@ -44,7 +44,7 @@ namespace ControlCatalog.Pages
public void OnSelectTemplateKey(object sender, SelectTemplateEventArgs e) public void OnSelectTemplateKey(object sender, SelectTemplateEventArgs e)
{ {
if (e.DataContext is ItemsRepeaterPageViewModel.Item item) if (e.DataContext is ItemsRepeaterPageViewModelItem item)
{ {
e.TemplateKey = (item.Index % 2 == 0) ? "even" : "odd"; e.TemplateKey = (item.Index % 2 == 0) ? "even" : "odd";
} }
@ -125,7 +125,7 @@ namespace ControlCatalog.Pages
private void RepeaterClick(object? sender, PointerPressedEventArgs e) private void RepeaterClick(object? sender, PointerPressedEventArgs e)
{ {
if ((e.Source as TextBlock)?.DataContext is ItemsRepeaterPageViewModel.Item item) if ((e.Source as TextBlock)?.DataContext is ItemsRepeaterPageViewModelItem item)
{ {
_viewModel.SelectedItem = item; _viewModel.SelectedItem = item;
_selectedIndex = _viewModel.Items.IndexOf(item); _selectedIndex = _viewModel.Items.IndexOf(item);

4
samples/ControlCatalog/Pages/LabelsPage.axaml

@ -2,9 +2,11 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:ControlCatalog.Models"
mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="250" mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="250"
x:Class="ControlCatalog.Pages.LabelsPage" x:Class="ControlCatalog.Pages.LabelsPage"
x:Name="_labelsPage"> x:Name="_labelsPage"
x:DataType="models:Person">
<UserControl.Styles> <UserControl.Styles>
<Style Selector="Label"> <Style Selector="Label">
<Setter Property="VerticalAlignment" Value="Center"/> <Setter Property="VerticalAlignment" Value="Center"/>

4
samples/ControlCatalog/Pages/ListBoxPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.ListBoxPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.ListBoxPage"
x:DataType="viewModels:ListBoxPageViewModel">
<DockPanel> <DockPanel>
<DockPanel.Styles> <DockPanel.Styles>
<Style Selector="ListBox ListBoxItem:nth-child(5n+3)"> <Style Selector="ListBox ListBoxItem:nth-child(5n+3)">

8
samples/ControlCatalog/Pages/MenuPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.MenuPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.MenuPage"
x:DataType="viewModels:MenuPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">Exported menu fallback</TextBlock> <TextBlock Classes="h2">Exported menu fallback</TextBlock>
<TextBlock>(Should be only visible on platforms without desktop-global menu bar)</TextBlock> <TextBlock>(Should be only visible on platforms without desktop-global menu bar)</TextBlock>
@ -45,7 +47,7 @@
<TextBlock Classes="h3" Margin="4 8">Dyanamically generated</TextBlock> <TextBlock Classes="h3" Margin="4 8">Dyanamically generated</TextBlock>
<Menu Items="{Binding MenuItems}"> <Menu Items="{Binding MenuItems}">
<Menu.Styles> <Menu.Styles>
<Style Selector="MenuItem"> <Style Selector="MenuItem" x:DataType="viewModels:MenuItemViewModel">
<Setter Property="Header" Value="{Binding Header}"/> <Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Items" Value="{Binding Items}"/> <Setter Property="Items" Value="{Binding Items}"/>
<Setter Property="Command" Value="{Binding Command}"/> <Setter Property="Command" Value="{Binding Command}"/>
@ -68,7 +70,7 @@
<Separator/> <Separator/>
<MenuItem Header="_Recent" Items="{Binding RecentItems}"> <MenuItem Header="_Recent" Items="{Binding RecentItems}">
<MenuItem.Styles> <MenuItem.Styles>
<Style Selector="MenuItem"> <Style Selector="MenuItem" x:DataType="viewModels:MenuItemViewModel">
<Setter Property="Header" Value="{Binding Header}"/> <Setter Property="Header" Value="{Binding Header}"/>
</Style> </Style>
</MenuItem.Styles> </MenuItem.Styles>

4
samples/ControlCatalog/Pages/NotificationsPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.NotificationsPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.NotificationsPage"
x:DataType="viewModels:NotificationViewModel">
<StackPanel Orientation="Vertical" Spacing="4" HorizontalAlignment="Left"> <StackPanel Orientation="Vertical" Spacing="4" HorizontalAlignment="Left">
<Button Content="Show Standard Managed Notification" Command="{Binding ShowManagedNotificationCommand}" /> <Button Content="Show Standard Managed Notification" Command="{Binding ShowManagedNotificationCommand}" />
<Button Content="Show Custom Managed Notification" Command="{Binding ShowCustomManagedNotificationCommand}" /> <Button Content="Show Custom Managed Notification" Command="{Binding ShowCustomManagedNotificationCommand}" />

11
samples/ControlCatalog/Pages/NumericUpDownPage.xaml

@ -1,8 +1,10 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=netstandard" xmlns:sys="using:System"
xmlns:converter="clr-namespace:ControlCatalog.Converter" xmlns:converter="using:ControlCatalog.Converter"
x:Class="ControlCatalog.Pages.NumericUpDownPage"> xmlns:pages="using:ControlCatalog.Pages"
x:Class="ControlCatalog.Pages.NumericUpDownPage"
x:DataType="pages:NumbersPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4" <StackPanel Orientation="Vertical" Spacing="4"
MaxWidth="800"> MaxWidth="800">
<TextBlock Margin="2" Classes="h2" TextWrapping="Wrap">Numeric up-down control provides a TextBox with button spinners that allow incrementing and decrementing numeric values by using the spinner buttons, keyboard up/down arrows, or mouse wheel.</TextBlock> <TextBlock Margin="2" Classes="h2" TextWrapping="Wrap">Numeric up-down control provides a TextBox with button spinners that allow incrementing and decrementing numeric values by using the spinner buttons, keyboard up/down arrows, or mouse wheel.</TextBlock>
@ -43,7 +45,7 @@
VerticalAlignment="Center" Margin="2"/> VerticalAlignment="Center" Margin="2"/>
<TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Margin="2">CultureInfo:</TextBlock> <TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Margin="2">CultureInfo:</TextBlock>
<ComboBox Grid.Row="2" Grid.Column="1" Items="{Binding Cultures}" SelectedItem="{Binding #upDown.CultureInfo}" <ComboBox x:Name="CultureSelector" Grid.Row="2" Grid.Column="1" Items="{Binding Cultures}"
VerticalAlignment="Center" Margin="2"/> VerticalAlignment="Center" Margin="2"/>
<TextBlock Grid.Row="3" Grid.Column="0" VerticalAlignment="Center" Margin="2">Watermark:</TextBlock> <TextBlock Grid.Row="3" Grid.Column="0" VerticalAlignment="Center" Margin="2">Watermark:</TextBlock>
@ -77,6 +79,7 @@
<StackPanel Orientation="Vertical" Margin="10"> <StackPanel Orientation="Vertical" Margin="10">
<Label Target="upDown" FontSize="14" FontWeight="Bold" VerticalAlignment="Center">Usage of decimal NumericUpDown:</Label> <Label Target="upDown" FontSize="14" FontWeight="Bold" VerticalAlignment="Center">Usage of decimal NumericUpDown:</Label>
<NumericUpDown Name="upDown" Minimum="0" Maximum="10" Increment="0.5" <NumericUpDown Name="upDown" Minimum="0" Maximum="10" Increment="0.5"
NumberFormat="{Binding #CultureSelector.SelectedItem, Converter={x:Static pages:NumericUpDownPage.CultureConverter}}"
VerticalAlignment="Center" Value="{Binding DecimalValue}" VerticalAlignment="Center" Value="{Binding DecimalValue}"
Watermark="Enter text" FormatString="{Binding SelectedFormat.Value}"/> Watermark="Enter text" FormatString="{Binding SelectedFormat.Value}"/>
</StackPanel> </StackPanel>

3
samples/ControlCatalog/Pages/NumericUpDownPage.xaml.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Data.Converters;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using MiniMvvm; using MiniMvvm;
@ -22,6 +23,8 @@ namespace ControlCatalog.Pages
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
public static IValueConverter CultureConverter =
new FuncValueConverter<CultureInfo, NumberFormatInfo>(c => (c ?? CultureInfo.CurrentCulture).NumberFormat);
} }
public class NumbersPageViewModel : ViewModelBase public class NumbersPageViewModel : ViewModelBase

2
samples/ControlCatalog/Pages/OpenGlPage.xaml

@ -1,7 +1,7 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.OpenGlPage" x:Class="ControlCatalog.Pages.OpenGlPage"
xmlns:pages="clr-namespace:ControlCatalog.Pages"> xmlns:pages="using:ControlCatalog.Pages">
<Grid> <Grid>
<pages:OpenGlPageControl x:Name="GL"/> <pages:OpenGlPageControl x:Name="GL"/>
<StackPanel> <StackPanel>

4
samples/ControlCatalog/Pages/PlatformInfoPage.xaml

@ -3,9 +3,11 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="using:ControlCatalog.ViewModels"
d:DesignHeight="800" d:DesignHeight="800"
d:DesignWidth="400" d:DesignWidth="400"
mc:Ignorable="d"> mc:Ignorable="d"
x:DataType="viewModels:PlatformInformationViewModel">
<StackPanel Spacing="20"> <StackPanel Spacing="20">
<TextBlock Text="{Binding PlatformInfo}" /> <TextBlock Text="{Binding PlatformInfo}" />

2
samples/ControlCatalog/Pages/ProgressBarPage.xaml

@ -31,7 +31,7 @@
<StackPanel Spacing="10"> <StackPanel Spacing="10">
<ProgressBar VerticalAlignment="Center" IsIndeterminate="True" <ProgressBar VerticalAlignment="Center" IsIndeterminate="True"
Minimum="{Binding #minimum.Value}" Maximum="{Binding #maximum.value}"/> Minimum="{Binding #minimum.Value}" Maximum="{Binding #maximum.Value}"/>
<ProgressBar VerticalAlignment="Center" Value="5" Maximum="10" /> <ProgressBar VerticalAlignment="Center" Value="5" Maximum="10" />
<ProgressBar VerticalAlignment="Center" Value="50" /> <ProgressBar VerticalAlignment="Center" Value="50" />
<ProgressBar VerticalAlignment="Center" Value="50" Minimum="25" Maximum="75" /> <ProgressBar VerticalAlignment="Center" Value="50" Minimum="25" Maximum="75" />

4
samples/ControlCatalog/Pages/ScrollViewerPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.ScrollViewerPage"> xmlns:pages="using:ControlCatalog.Pages"
x:Class="ControlCatalog.Pages.ScrollViewerPage"
x:DataType="pages:ScrollViewerPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">Allows for horizontal and vertical content scrolling.</TextBlock> <TextBlock Classes="h2">Allows for horizontal and vertical content scrolling.</TextBlock>

2
samples/ControlCatalog/Pages/SliderPage.xaml

@ -1,6 +1,6 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=netstandard" xmlns:sys="using:System"
x:Class="ControlCatalog.Pages.SliderPage"> x:Class="ControlCatalog.Pages.SliderPage">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">A control that lets the user select from a range of values by moving a Thumb control along a Track.</TextBlock> <TextBlock Classes="h2">A control that lets the user select from a range of values by moving a Thumb control along a Track.</TextBlock>

6
samples/ControlCatalog/Pages/SplitViewPage.xaml

@ -2,8 +2,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="using:ControlCatalog.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="ControlCatalog.Pages.SplitViewPage"> x:Class="ControlCatalog.Pages.SplitViewPage"
x:DataType="viewModels:SplitViewPageViewModel">
<Border> <Border>
@ -51,7 +53,7 @@
<!--{Binding SelectedItem.Tag, ElementName=PaneBackgroundSelector}--> <!--{Binding SelectedItem.Tag, ElementName=PaneBackgroundSelector}-->
<SplitView Name="SplitView" <SplitView Name="SplitView"
PanePlacement="{Binding PanePlacement}" PanePlacement="{Binding PanePlacement}"
PaneBackground="{Binding SelectedItem.Tag, ElementName=PaneBackgroundSelector}" PaneBackground="{Binding ((Control)SelectedItem).Tag, ElementName=PaneBackgroundSelector, FallbackValue={x:Null}}"
OpenPaneLength="{Binding Value, ElementName=OpenPaneLengthSlider}" OpenPaneLength="{Binding Value, ElementName=OpenPaneLengthSlider}"
CompactPaneLength="{Binding Value, ElementName=CompactPaneLengthSlider}" CompactPaneLength="{Binding Value, ElementName=CompactPaneLengthSlider}"
DisplayMode="{Binding CurrentDisplayMode}"> DisplayMode="{Binding CurrentDisplayMode}">

10
samples/ControlCatalog/Pages/TabControlPage.xaml

@ -1,7 +1,9 @@
<UserControl <UserControl
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.TabControlPage" x:Class="ControlCatalog.Pages.TabControlPage"
xmlns="https://github.com/avaloniaui"> xmlns="https://github.com/avaloniaui"
xmlns:viewModels="using:ControlCatalog.ViewModels"
x:DataType="viewModels:TabControlPageViewModel">
<DockPanel> <DockPanel>
<TextBlock <TextBlock
DockPanel.Dock="Top" DockPanel.Dock="Top"
@ -53,14 +55,14 @@
Margin="0 16" Margin="0 16"
TabStripPlacement="{Binding TabPlacement}"> TabStripPlacement="{Binding TabPlacement}">
<TabControl.ItemTemplate> <TabControl.ItemTemplate>
<DataTemplate> <DataTemplate x:DataType="viewModels:TabControlPageViewModelItem">
<TextBlock <TextBlock
Text="{Binding Header}"> Text="{Binding Header}">
</TextBlock> </TextBlock>
</DataTemplate> </DataTemplate>
</TabControl.ItemTemplate> </TabControl.ItemTemplate>
<TabControl.ContentTemplate> <TabControl.ContentTemplate>
<DataTemplate> <DataTemplate x:DataType="viewModels:TabControlPageViewModelItem">
<StackPanel Orientation="Vertical" Spacing="8"> <StackPanel Orientation="Vertical" Spacing="8">
<TextBlock Text="{Binding Text}"/> <TextBlock Text="{Binding Text}"/>
<Image Source="{Binding Image}" Width="300"/> <Image Source="{Binding Image}" Width="300"/>
@ -68,7 +70,7 @@
</DataTemplate> </DataTemplate>
</TabControl.ContentTemplate> </TabControl.ContentTemplate>
<TabControl.Styles> <TabControl.Styles>
<Style Selector="TabItem"> <Style Selector="TabItem" x:DataType="viewModels:TabControlPageViewModelItem">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}"/> <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
</Style> </Style>
</TabControl.Styles> </TabControl.Styles>

32
samples/ControlCatalog/Pages/TabControlPage.xaml.cs

@ -5,8 +5,7 @@ using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging; using Avalonia.Media.Imaging;
using Avalonia.Platform; using Avalonia.Platform;
using ControlCatalog.ViewModels;
using MiniMvvm;
namespace ControlCatalog.Pages namespace ControlCatalog.Pages
{ {
@ -18,23 +17,23 @@ namespace ControlCatalog.Pages
{ {
InitializeComponent(); InitializeComponent();
DataContext = new PageViewModel DataContext = new TabControlPageViewModel
{ {
Tabs = new[] Tabs = new[]
{ {
new TabItemViewModel new TabControlPageViewModelItem
{ {
Header = "Arch", Header = "Arch",
Text = "This is the first templated tab page.", Text = "This is the first templated tab page.",
Image = LoadBitmap("avares://ControlCatalog/Assets/delicate-arch-896885_640.jpg"), Image = LoadBitmap("avares://ControlCatalog/Assets/delicate-arch-896885_640.jpg"),
}, },
new TabItemViewModel new TabControlPageViewModelItem
{ {
Header = "Leaf", Header = "Leaf",
Text = "This is the second templated tab page.", Text = "This is the second templated tab page.",
Image = LoadBitmap("avares://ControlCatalog/Assets/maple-leaf-888807_640.jpg"), Image = LoadBitmap("avares://ControlCatalog/Assets/maple-leaf-888807_640.jpg"),
}, },
new TabItemViewModel new TabControlPageViewModelItem
{ {
Header = "Disabled", Header = "Disabled",
Text = "You should not see this.", Text = "You should not see this.",
@ -55,26 +54,5 @@ namespace ControlCatalog.Pages
var assets = AvaloniaLocator.Current!.GetService<IAssetLoader>()!; var assets = AvaloniaLocator.Current!.GetService<IAssetLoader>()!;
return new Bitmap(assets.Open(new Uri(uri))); return new Bitmap(assets.Open(new Uri(uri)));
} }
private class PageViewModel : ViewModelBase
{
private Dock _tabPlacement;
public TabItemViewModel[]? Tabs { get; set; }
public Dock TabPlacement
{
get { return _tabPlacement; }
set { this.RaiseAndSetIfChanged(ref _tabPlacement, value); }
}
}
private class TabItemViewModel
{
public string? Header { get; set; }
public string? Text { get; set; }
public IBitmap? Image { get; set; }
public bool IsEnabled { get; set; } = true;
}
} }
} }

10
samples/ControlCatalog/Pages/TabStripPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <UserControl xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.TabStripPage" x:Class="ControlCatalog.Pages.TabStripPage"
xmlns="https://github.com/avaloniaui"> xmlns="https://github.com/avaloniaui"
xmlns:viewModels="using:ControlCatalog.ViewModels"
x:DataType="viewModels:TabControlPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">A control which displays a selectable strip of tabs</TextBlock> <TextBlock Classes="h2">A control which displays a selectable strip of tabs</TextBlock>
@ -16,14 +18,14 @@
<Separator Margin="0 16"/> <Separator Margin="0 16"/>
<TextBlock Classes="h1">Dynamically generated</TextBlock> <TextBlock Classes="h1">Dynamically generated</TextBlock>
<TabStrip Items="{Binding}"> <TabStrip Items="{Binding Tabs}">
<TabStrip.Styles> <TabStrip.Styles>
<Style Selector="TabStripItem"> <Style Selector="TabStripItem" x:DataType="viewModels:TabControlPageViewModelItem">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}"/> <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
</Style> </Style>
</TabStrip.Styles> </TabStrip.Styles>
<TabStrip.ItemTemplate> <TabStrip.ItemTemplate>
<DataTemplate> <DataTemplate x:DataType="viewModels:TabControlPageViewModelItem">
<TextBlock Text="{Binding Header}"/> <TextBlock Text="{Binding Header}"/>
</DataTemplate> </DataTemplate>
</TabStrip.ItemTemplate> </TabStrip.ItemTemplate>

40
samples/ControlCatalog/Pages/TabStripPage.xaml.cs

@ -1,9 +1,6 @@
using System;
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging; using ControlCatalog.ViewModels;
using Avalonia.Platform;
namespace ControlCatalog.Pages namespace ControlCatalog.Pages
{ {
@ -13,21 +10,24 @@ namespace ControlCatalog.Pages
{ {
InitializeComponent(); InitializeComponent();
DataContext = new[] DataContext = new TabControlPageViewModel
{ {
new TabStripItemViewModel Tabs = new []
{ {
Header = "Item 1", new TabControlPageViewModelItem()
}, {
new TabStripItemViewModel Header = "Item 1",
{ },
Header = "Item 2", new TabControlPageViewModelItem
}, {
new TabStripItemViewModel Header = "Item 2",
{ },
Header = "Disabled", new TabControlPageViewModelItem
IsEnabled = false, {
}, Header = "Disabled",
IsEnabled = false,
},
}
}; };
} }
@ -35,11 +35,5 @@ namespace ControlCatalog.Pages
{ {
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
private class TabStripItemViewModel
{
public string? Header { get; set; }
public bool IsEnabled { get; set; } = true;
}
} }
} }

2
samples/ControlCatalog/Pages/TextBoxPage.xaml

@ -1,7 +1,7 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.TextBoxPage" x:Class="ControlCatalog.Pages.TextBoxPage"
xmlns:sys="clr-namespace:System;assembly=netstandard"> xmlns:sys="using:System">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<Label Classes="h2">A control into which the user can input text</Label> <Label Classes="h2">A control into which the user can input text</Label>

3
samples/ControlCatalog/Pages/TransitioningContentControlPage.axaml

@ -3,11 +3,10 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:ControlCatalog.ViewModels" xmlns:vm="using:ControlCatalog.ViewModels"
xmlns:converter="clr-namespace:ControlCatalog.Converter" xmlns:converter="using:ControlCatalog.Converter"
xmlns:system="using:System" xmlns:system="using:System"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="vm:TransitioningContentControlPageViewModel" x:DataType="vm:TransitioningContentControlPageViewModel"
x:CompileBindings="True"
x:Class="ControlCatalog.Pages.TransitioningContentControlPage"> x:Class="ControlCatalog.Pages.TransitioningContentControlPage">
<UserControl.DataContext> <UserControl.DataContext>

4
samples/ControlCatalog/Pages/TreeViewPage.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Pages.TreeViewPage"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Pages.TreeViewPage"
x:DataType="viewModels:TreeViewPageViewModel">
<StackPanel Orientation="Vertical" Spacing="4"> <StackPanel Orientation="Vertical" Spacing="4">
<TextBlock Classes="h2">Displays a hierachical tree of data.</TextBlock> <TextBlock Classes="h2">Displays a hierachical tree of data.</TextBlock>

2
samples/ControlCatalog/Pages/ViewboxPage.xaml

@ -1,6 +1,6 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:collections="clr-namespace:System.Collections;assembly=netstandard" xmlns:collections="using:System.Collections"
x:Class="ControlCatalog.Pages.ViewboxPage"> x:Class="ControlCatalog.Pages.ViewboxPage">
<Grid RowDefinitions="Auto,*,*"> <Grid RowDefinitions="Auto,*,*">

4
samples/ControlCatalog/Pages/WindowCustomizationsPage.xaml

@ -2,8 +2,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="using:ControlCatalog.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="ControlCatalog.Pages.WindowCustomizationsPage"> x:Class="ControlCatalog.Pages.WindowCustomizationsPage"
x:DataType="viewModels:MainWindowViewModel">
<StackPanel Spacing="10" Margin="25"> <StackPanel Spacing="10" Margin="25">
<CheckBox Content="Extend Client Area to Decorations" IsChecked="{Binding ExtendClientAreaEnabled}" /> <CheckBox Content="Extend Client Area to Decorations" IsChecked="{Binding ExtendClientAreaEnabled}" />
<CheckBox Content="Title Bar" IsChecked="{Binding SystemTitleBarEnabled}" /> <CheckBox Content="Title Bar" IsChecked="{Binding SystemTitleBarEnabled}" />

20
samples/ControlCatalog/ViewModels/CursorPageViewModel.cs

@ -27,18 +27,18 @@ namespace ControlCatalog.ViewModels
public IEnumerable<StandardCursorModel> StandardCursors { get; } public IEnumerable<StandardCursorModel> StandardCursors { get; }
public Cursor CustomCursor { get; } public Cursor CustomCursor { get; }
}
public class StandardCursorModel
public class StandardCursorModel
{
public StandardCursorModel(StandardCursorType type)
{ {
public StandardCursorModel(StandardCursorType type) Type = type;
{ Cursor = new Cursor(type);
Type = type; }
Cursor = new Cursor(type);
}
public StandardCursorType Type { get; } public StandardCursorType Type { get; }
public Cursor Cursor { get; } public Cursor Cursor { get; }
}
} }
} }

44
samples/ControlCatalog/ViewModels/ItemsRepeaterPageViewModel.cs

@ -10,25 +10,25 @@ namespace ControlCatalog.ViewModels
{ {
private int _newItemIndex = 1; private int _newItemIndex = 1;
private int _newGenerationIndex = 0; private int _newGenerationIndex = 0;
private ObservableCollection<Item> _items; private ObservableCollection<ItemsRepeaterPageViewModelItem> _items;
public ItemsRepeaterPageViewModel() public ItemsRepeaterPageViewModel()
{ {
_items = CreateItems(); _items = CreateItems();
} }
public ObservableCollection<Item> Items public ObservableCollection<ItemsRepeaterPageViewModelItem> Items
{ {
get => _items; get => _items;
set => this.RaiseAndSetIfChanged(ref _items, value); set => this.RaiseAndSetIfChanged(ref _items, value);
} }
public Item? SelectedItem { get; set; } public ItemsRepeaterPageViewModelItem? SelectedItem { get; set; }
public void AddItem() public void AddItem()
{ {
var index = SelectedItem != null ? Items.IndexOf(SelectedItem) : -1; var index = SelectedItem != null ? Items.IndexOf(SelectedItem) : -1;
Items.Insert(index + 1, new Item(index + 1, $"New Item {_newItemIndex++}")); Items.Insert(index + 1, new ItemsRepeaterPageViewModelItem(index + 1, $"New Item {_newItemIndex++}"));
} }
public void RemoveItem() public void RemoveItem()
@ -59,33 +59,33 @@ namespace ControlCatalog.ViewModels
Items = CreateItems(); Items = CreateItems();
} }
private ObservableCollection<Item> CreateItems() private ObservableCollection<ItemsRepeaterPageViewModelItem> CreateItems()
{ {
var suffix = _newGenerationIndex == 0 ? string.Empty : $"[{_newGenerationIndex.ToString()}]"; var suffix = _newGenerationIndex == 0 ? string.Empty : $"[{_newGenerationIndex.ToString()}]";
_newGenerationIndex++; _newGenerationIndex++;
return new ObservableCollection<Item>( return new ObservableCollection<ItemsRepeaterPageViewModelItem>(
Enumerable.Range(1, 100000).Select(i => new Item(i, $"Item {i.ToString()} {suffix}"))); Enumerable.Range(1, 100000).Select(i => new ItemsRepeaterPageViewModelItem(i, $"Item {i.ToString()} {suffix}")));
} }
}
public class ItemsRepeaterPageViewModelItem : ViewModelBase
{
private double _height = double.NaN;
public class Item : ViewModelBase public ItemsRepeaterPageViewModelItem(int index, string text)
{ {
private double _height = double.NaN; Index = index;
Text = text;
public Item(int index, string text) }
{ public int Index { get; }
Index = index; public string Text { get; }
Text = text;
}
public int Index { get; }
public string Text { get; }
public double Height public double Height
{ {
get => _height; get => _height;
set => this.RaiseAndSetIfChanged(ref _height, value); set => this.RaiseAndSetIfChanged(ref _height, value);
}
} }
} }
} }

26
samples/ControlCatalog/ViewModels/TabControlPageViewModel.cs

@ -0,0 +1,26 @@
using Avalonia.Controls;
using Avalonia.Media.Imaging;
using MiniMvvm;
namespace ControlCatalog.ViewModels;
public class TabControlPageViewModel : ViewModelBase
{
private Dock _tabPlacement;
public TabControlPageViewModelItem[]? Tabs { get; set; }
public Dock TabPlacement
{
get { return _tabPlacement; }
set { this.RaiseAndSetIfChanged(ref _tabPlacement, value); }
}
}
public class TabControlPageViewModelItem
{
public string? Header { get; set; }
public string? Text { get; set; }
public IBitmap? Image { get; set; }
public bool IsEnabled { get; set; } = true;
}

4
samples/ControlCatalog/Views/CustomNotificationView.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.Views.CustomNotificationView"> xmlns:viewModels="using:ControlCatalog.ViewModels"
x:Class="ControlCatalog.Views.CustomNotificationView"
x:DataType="viewModels:NotificationViewModel">
<Border Padding="12" MinHeight="20" Background="DodgerBlue"> <Border Padding="12" MinHeight="20" Background="DodgerBlue">
<Grid ColumnDefinitions="Auto,*"> <Grid ColumnDefinitions="Auto,*">
<Panel Margin="0,0,12,0" Width="25" Height="25" VerticalAlignment="Top"> <Panel Margin="0,0,12,0" Width="25" Height="25" VerticalAlignment="Top">

4
samples/IntegrationTestApp/MainWindow.axaml

@ -2,10 +2,12 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:integrationTestApp="using:IntegrationTestApp"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="IntegrationTestApp.MainWindow" x:Class="IntegrationTestApp.MainWindow"
Name="MainWindow" Name="MainWindow"
Title="IntegrationTestApp"> Title="IntegrationTestApp"
x:DataType="integrationTestApp:MainWindow">
<NativeMenu.Menu> <NativeMenu.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="File"> <NativeMenuItem Header="File">

1
samples/IntegrationTestApp/ShowWindowTest.axaml

@ -2,6 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="IntegrationTestApp.ShowWindowTest" x:Class="IntegrationTestApp.ShowWindowTest"
Name="SecondaryWindow" Name="SecondaryWindow"
x:DataType="Window"
Title="Show Window Test"> Title="Show Window Test">
<Grid ColumnDefinitions="Auto,Auto" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto"> <Grid ColumnDefinitions="Auto,Auto" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
<Label Grid.Column="0" Grid.Row="1">Client Size</Label> <Label Grid.Column="0" Grid.Row="1">Client Size</Label>

1
samples/MobileSandbox/App.xaml

@ -1,6 +1,5 @@
<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"
x:CompileBindings="True"
Name="Mobile Sandbox" Name="Mobile Sandbox"
x:Class="MobileSandbox.App"> x:Class="MobileSandbox.App">
<Application.Styles> <Application.Styles>

4
samples/MobileSandbox/MainView.xaml

@ -1,6 +1,8 @@
<UserControl x:Class="MobileSandbox.MainView" <UserControl x:Class="MobileSandbox.MainView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mobileSandbox="using:MobileSandbox"
x:DataType="mobileSandbox:MainView">
<StackPanel Margin="100 50" Spacing="50"> <StackPanel Margin="100 50" Spacing="50">
<TextBlock Text="Login" Foreground="White" /> <TextBlock Text="Login" Foreground="White" />
<TextBox Watermark="Text" /> <TextBox Watermark="Text" />

8
samples/MobileSandbox/Views/CustomNotificationView.xaml

@ -7,12 +7,12 @@
<TextBlock Text="&#xE115;" FontFamily="Segoe UI Symbol" FontSize="20" TextAlignment="Center" VerticalAlignment="Center"/> <TextBlock Text="&#xE115;" FontFamily="Segoe UI Symbol" FontSize="20" TextAlignment="Center" VerticalAlignment="Center"/>
</Panel> </Panel>
<DockPanel Grid.Column="1"> <DockPanel Grid.Column="1">
<TextBlock DockPanel.Dock="Top" Text="{Binding Title}" FontWeight="Medium" /> <TextBlock DockPanel.Dock="Top" Text="{ReflectionBinding Title}" FontWeight="Medium" />
<StackPanel Spacing="20" DockPanel.Dock="Bottom" Margin="0,8,0,0" Orientation="Horizontal"> <StackPanel Spacing="20" DockPanel.Dock="Bottom" Margin="0,8,0,0" Orientation="Horizontal">
<Button Content="No" DockPanel.Dock="Right" NotificationCard.CloseOnClick="True" Command="{Binding NoCommand}" Margin="0,0,8,0" /> <Button Content="No" DockPanel.Dock="Right" NotificationCard.CloseOnClick="True" Command="{ReflectionBinding NoCommand}" Margin="0,0,8,0" />
<Button Content="Yes" DockPanel.Dock="Right" NotificationCard.CloseOnClick="True" Command="{Binding YesCommand}" /> <Button Content="Yes" DockPanel.Dock="Right" NotificationCard.CloseOnClick="True" Command="{ReflectionBinding YesCommand}" />
</StackPanel> </StackPanel>
<TextBlock Text="{Binding Message}" TextWrapping="Wrap" Opacity=".8" Margin="0,8,0,0"/> <TextBlock Text="{ReflectionBinding Message}" TextWrapping="Wrap" Opacity=".8" Margin="0,8,0,0"/>
</DockPanel> </DockPanel>
</Grid> </Grid>
</Border> </Border>

6
samples/RenderDemo/MainWindow.xaml

@ -1,9 +1,11 @@
<Window x:Class="RenderDemo.MainWindow" <Window x:Class="RenderDemo.MainWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:ControlSamples;assembly=ControlSamples" xmlns:controls="using:ControlSamples"
xmlns:pages="clr-namespace:RenderDemo.Pages" xmlns:pages="using:RenderDemo.Pages"
xmlns:viewModels="using:RenderDemo.ViewModels"
Title="AvaloniaUI Rendering Test" Title="AvaloniaUI Rendering Test"
x:DataType="viewModels:MainWindowViewModel"
Width="{Binding Width, Mode=TwoWay}" Width="{Binding Width, Mode=TwoWay}"
Height="{Binding Height, Mode=TwoWay}"> Height="{Binding Height, Mode=TwoWay}">
<controls:HamburgerMenu ExpandedModeThresholdWidth="760"> <controls:HamburgerMenu ExpandedModeThresholdWidth="760">

4
samples/RenderDemo/Pages/AnimationsPage.xaml

@ -1,7 +1,9 @@
<UserControl <UserControl
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels="using:RenderDemo.ViewModels"
x:Class="RenderDemo.Pages.AnimationsPage" x:Class="RenderDemo.Pages.AnimationsPage"
x:DataType="viewModels:AnimationsPageViewModel"
MaxWidth="600"> MaxWidth="600">
<UserControl.Styles> <UserControl.Styles>
<Styles> <Styles>

2
samples/RenderDemo/Pages/CustomAnimatorPage.xaml

@ -1,7 +1,7 @@
<UserControl <UserControl
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pages="clr-namespace:RenderDemo.Pages" xmlns:pages="using:RenderDemo.Pages"
x:Class="RenderDemo.Pages.CustomAnimatorPage" x:Class="RenderDemo.Pages.CustomAnimatorPage"
MaxWidth="600"> MaxWidth="600">
<Grid> <Grid>

2
samples/RenderDemo/Pages/GlyphRunPage.xaml

@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RenderDemo.Pages" xmlns:local="using:RenderDemo.Pages"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="RenderDemo.Pages.GlyphRunPage"> x:Class="RenderDemo.Pages.GlyphRunPage">
<Grid <Grid

2
samples/RenderDemo/Pages/LineBoundsPage.xaml

@ -3,7 +3,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:controls="clr-namespace:RenderDemo.Controls" xmlns:controls="using:RenderDemo.Controls"
x:Class="RenderDemo.Pages.LineBoundsPage"> x:Class="RenderDemo.Pages.LineBoundsPage">
<controls:LineBoundsDemoControl /> <controls:LineBoundsDemoControl />
</UserControl> </UserControl>

4
samples/RenderDemo/Pages/Transform3DPage.axaml

@ -2,8 +2,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="using:RenderDemo.ViewModels"
mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="700" mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="700"
x:Class="RenderDemo.Pages.Transform3DPage"> x:Class="RenderDemo.Pages.Transform3DPage"
x:DataType="viewModels:Transform3DPageViewModel">
<UserControl.Styles> <UserControl.Styles>
<Styles> <Styles>
<Styles.Resources> <Styles.Resources>

2
samples/RenderDemo/Pages/TransitionsPage.xaml

@ -1,7 +1,9 @@
<UserControl <UserControl
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels="using:RenderDemo.ViewModels"
x:Class="RenderDemo.Pages.TransitionsPage" x:Class="RenderDemo.Pages.TransitionsPage"
x:DataType="viewModels:AnimationsPageViewModel"
MaxWidth="600"> MaxWidth="600">
<UserControl.Styles> <UserControl.Styles>
<Styles> <Styles>

6
samples/SampleControls/HamburgerMenu/HamburgerMenu.xaml

@ -194,7 +194,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="h1" Classes="h1"
Margin="{StaticResource HeaderMarginExpandedPane}" Margin="{StaticResource HeaderMarginExpandedPane}"
Text="{Binding $parent[TabControl].SelectedItem.Header, FallbackValue=''}"> Text="{Binding $parent[TabControl].SelectedItem.(TabItem.Header), FallbackValue=''}">
<TextBlock.Transitions> <TextBlock.Transitions>
<Transitions> <Transitions>
<ThicknessTransition Easing="{StaticResource SplitViewPaneAnimationEasing}" <ThicknessTransition Easing="{StaticResource SplitViewPaneAnimationEasing}"
@ -250,10 +250,10 @@
<Setter Property="PaneBackground" Value="{TemplateBinding PaneBackground}" /> <Setter Property="PaneBackground" Value="{TemplateBinding PaneBackground}" />
</Style> </Style>
<Style Selector="^ /template/ SplitView[DisplayMode=Overlay]"> <Style Selector="^ /template/ SplitView[DisplayMode=Overlay]">
<Setter Property="Background" Value="{Binding $parent[TabControl].ContentBackground}" /> <Setter Property="Background" Value="{Binding $parent[catalog:HamburgerMenu].ContentBackground}" />
</Style> </Style>
<Style Selector="^ /template/ SplitView[DisplayMode=Inline] Border#BackgroundBorder"> <Style Selector="^ /template/ SplitView[DisplayMode=Inline] Border#BackgroundBorder">
<Setter Property="Background" Value="{Binding $parent[TabControl].ContentBackground}" /> <Setter Property="Background" Value="{Binding $parent[catalog:HamburgerMenu].ContentBackground}" />
<Setter Property="BoxShadow" Value="{StaticResource NavigationContentShadow}" /> <Setter Property="BoxShadow" Value="{StaticResource NavigationContentShadow}" />
</Style> </Style>
<Style Selector="^ /template/ SplitView[DisplayMode=Inline][IsPaneOpen=True] Border#BackgroundBorder"> <Style Selector="^ /template/ SplitView[DisplayMode=Inline][IsPaneOpen=True] Border#BackgroundBorder">

4
samples/VirtualizationDemo/MainWindow.xaml

@ -1,9 +1,11 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels="using:VirtualizationDemo.ViewModels"
x:Class="VirtualizationDemo.MainWindow" x:Class="VirtualizationDemo.MainWindow"
Title="AvaloniaUI Virtualization Test" Title="AvaloniaUI Virtualization Test"
Width="800" Width="800"
Height="600"> Height="600"
x:DataType="viewModels:MainWindowViewModel">
<DockPanel LastChildFill="True" Margin="16"> <DockPanel LastChildFill="True" Margin="16">
<StackPanel DockPanel.Dock="Right" <StackPanel DockPanel.Dock="Right"
Margin="16 0 0 0" Margin="16 0 0 0"

5
src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorPicker.xaml

@ -1,10 +1,7 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls" xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:primitives="using:Avalonia.Controls.Primitives">
xmlns:primitives="using:Avalonia.Controls.Primitives"
xmlns:pc="clr-namespace:Avalonia.Controls.Primitives.Converters;assembly=Avalonia.Controls.ColorPicker"
x:CompileBindings="True">
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="avares://Avalonia.Controls.ColorPicker/Themes/Fluent/ColorView.xaml" /> <ResourceInclude Source="avares://Avalonia.Controls.ColorPicker/Themes/Fluent/ColorView.xaml" />

3
src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorPreviewer.xaml

@ -1,7 +1,6 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pc="using:Avalonia.Controls.Primitives.Converters" xmlns:pc="using:Avalonia.Controls.Primitives.Converters">
x:CompileBindings="True">
<pc:AccentColorConverter x:Key="AccentColorConverter" /> <pc:AccentColorConverter x:Key="AccentColorConverter" />
<x:Double x:Key="ColorPreviewerAccentSectionWidth">80</x:Double> <x:Double x:Key="ColorPreviewerAccentSectionWidth">80</x:Double>

3
src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorSlider.xaml

@ -1,6 +1,5 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
x:CompileBindings="True">
<ControlTheme x:Key="ColorSliderThumbTheme" <ControlTheme x:Key="ColorSliderThumbTheme"
TargetType="Thumb"> TargetType="Thumb">

3
src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorSpectrum.xaml

@ -1,7 +1,6 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls" xmlns:controls="using:Avalonia.Controls">
x:CompileBindings="True">
<ControlTheme x:Key="{x:Type ColorSpectrum}" <ControlTheme x:Key="{x:Type ColorSpectrum}"
TargetType="ColorSpectrum"> TargetType="ColorSpectrum">

5
src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorView.xaml

@ -3,9 +3,8 @@
xmlns:controls="using:Avalonia.Controls" xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters"
xmlns:primitives="using:Avalonia.Controls.Primitives" xmlns:primitives="using:Avalonia.Controls.Primitives"
xmlns:pc="clr-namespace:Avalonia.Controls.Primitives.Converters;assembly=Avalonia.Controls.ColorPicker" xmlns:pc="using:Avalonia.Controls.Primitives.Converters"
xmlns:globalization="clr-namespace:System.Globalization;assembly=mscorlib" xmlns:globalization="using:System.Globalization">
x:CompileBindings="True">
<pc:ContrastBrushConverter x:Key="ContrastBrushConverter" /> <pc:ContrastBrushConverter x:Key="ContrastBrushConverter" />
<converters:ColorToDisplayNameConverter x:Key="ColorToDisplayNameConverter" /> <converters:ColorToDisplayNameConverter x:Key="ColorToDisplayNameConverter" />

3
src/Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml

@ -1,7 +1,6 @@
<Styles xmlns="https://github.com/avaloniaui" <Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters">
x:CompileBindings="True">
<Styles.Resources> <Styles.Resources>
<ResourceDictionary> <ResourceDictionary>

5
src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorPicker.xaml

@ -1,10 +1,7 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls" xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:primitives="using:Avalonia.Controls.Primitives">
xmlns:primitives="using:Avalonia.Controls.Primitives"
xmlns:pc="clr-namespace:Avalonia.Controls.Primitives.Converters;assembly=Avalonia.Controls.ColorPicker"
x:CompileBindings="True">
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="avares://Avalonia.Controls.ColorPicker/Themes/Simple/ColorView.xaml" /> <ResourceInclude Source="avares://Avalonia.Controls.ColorPicker/Themes/Simple/ColorView.xaml" />

3
src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorPreviewer.xaml

@ -1,7 +1,6 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pc="using:Avalonia.Controls.Primitives.Converters" xmlns:pc="using:Avalonia.Controls.Primitives.Converters">
x:CompileBindings="True">
<pc:AccentColorConverter x:Key="AccentColorConverter" /> <pc:AccentColorConverter x:Key="AccentColorConverter" />
<x:Double x:Key="ColorPreviewerAccentSectionWidth">80</x:Double> <x:Double x:Key="ColorPreviewerAccentSectionWidth">80</x:Double>

3
src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorSlider.xaml

@ -1,6 +1,5 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
x:CompileBindings="True">
<ControlTheme x:Key="ColorSliderThumbTheme" <ControlTheme x:Key="ColorSliderThumbTheme"
TargetType="Thumb"> TargetType="Thumb">

3
src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorSpectrum.xaml

@ -1,7 +1,6 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls" xmlns:controls="using:Avalonia.Controls">
x:CompileBindings="True">
<ControlTheme x:Key="{x:Type ColorSpectrum}" <ControlTheme x:Key="{x:Type ColorSpectrum}"
TargetType="ColorSpectrum"> TargetType="ColorSpectrum">

5
src/Avalonia.Controls.ColorPicker/Themes/Simple/ColorView.xaml

@ -3,9 +3,8 @@
xmlns:controls="using:Avalonia.Controls" xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters"
xmlns:primitives="using:Avalonia.Controls.Primitives" xmlns:primitives="using:Avalonia.Controls.Primitives"
xmlns:pc="clr-namespace:Avalonia.Controls.Primitives.Converters;assembly=Avalonia.Controls.ColorPicker" xmlns:pc="using:Avalonia.Controls.Primitives.Converters"
xmlns:globalization="clr-namespace:System.Globalization;assembly=mscorlib" xmlns:globalization="using:System.Globalization">
x:CompileBindings="True">
<pc:ContrastBrushConverter x:Key="ContrastBrushConverter" /> <pc:ContrastBrushConverter x:Key="ContrastBrushConverter" />
<converters:ColorToDisplayNameConverter x:Key="ColorToDisplayNameConverter" /> <converters:ColorToDisplayNameConverter x:Key="ColorToDisplayNameConverter" />

3
src/Avalonia.Controls.ColorPicker/Themes/Simple/Simple.xaml

@ -1,7 +1,6 @@
<Styles xmlns="https://github.com/avaloniaui" <Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters">
x:CompileBindings="True">
<Styles.Resources> <Styles.Resources>
<ResourceDictionary> <ResourceDictionary>

6
src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml

@ -1,5 +1,5 @@
<Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:CompileBindings="True"> xmlns:collections="using:Avalonia.Collections">
<Styles.Resources> <Styles.Resources>
<x:Double x:Key="ListAccentLowOpacity">0.6</x:Double> <x:Double x:Key="ListAccentLowOpacity">0.6</x:Double>
<x:Double x:Key="ListAccentMediumOpacity">0.8</x:Double> <x:Double x:Key="ListAccentMediumOpacity">0.8</x:Double>
@ -402,7 +402,7 @@
<Setter Property="FontSize" Value="15" /> <Setter Property="FontSize" Value="15" />
<Setter Property="MinHeight" Value="32" /> <Setter Property="MinHeight" Value="32" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate x:DataType="collections:DataGridCollectionViewGroup">
<DataGridFrozenGrid Name="PART_Root" <DataGridFrozenGrid Name="PART_Root"
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
MinHeight="{TemplateBinding MinHeight}" MinHeight="{TemplateBinding MinHeight}"
@ -433,7 +433,7 @@
IsVisible="{TemplateBinding IsPropertyNameVisible}" IsVisible="{TemplateBinding IsPropertyNameVisible}"
Foreground="{TemplateBinding Foreground}" /> Foreground="{TemplateBinding Foreground}" />
<TextBlock Margin="4,0,0,0" <TextBlock Margin="4,0,0,0"
Text="{ReflectionBinding Key}" Text="{Binding Key}"
Foreground="{TemplateBinding Foreground}" /> Foreground="{TemplateBinding Foreground}" />
<TextBlock Name="PART_ItemCountElement" <TextBlock Name="PART_ItemCountElement"
Margin="4,0,0,0" Margin="4,0,0,0"

5
src/Avalonia.Controls.DataGrid/Themes/Simple.xaml

@ -1,5 +1,6 @@
<Styles xmlns="https://github.com/avaloniaui" <Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:collections="using:Avalonia.Collections">
<Styles.Resources> <Styles.Resources>
<Thickness x:Key="DataGridTextColumnCellTextBlockMargin">4</Thickness> <Thickness x:Key="DataGridTextColumnCellTextBlockMargin">4</Thickness>
<ControlTheme x:Key="DataGridCellTextBlockTheme" <ControlTheme x:Key="DataGridCellTextBlockTheme"
@ -253,7 +254,7 @@
<Setter Property="Background" Value="{DynamicResource ThemeControlMidHighBrush}" /> <Setter Property="Background" Value="{DynamicResource ThemeControlMidHighBrush}" />
<Setter Property="Height" Value="20" /> <Setter Property="Height" Value="20" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate x:DataType="collections:DataGridCollectionViewGroup">
<DataGridFrozenGrid Name="Root" <DataGridFrozenGrid Name="Root"
ColumnDefinitions="Auto,Auto,Auto,Auto" ColumnDefinitions="Auto,Auto,Auto,Auto"
RowDefinitions="Auto,*,Auto"> RowDefinitions="Auto,*,Auto">

1
src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.axaml

@ -1,7 +1,6 @@
<Styles xmlns="https://github.com/avaloniaui" <Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Diagnostics.Controls" xmlns:controls="using:Avalonia.Diagnostics.Controls"
x:CompileBindings="True"
x:DataType="controls:FilterTextBox"> x:DataType="controls:FilterTextBox">
<Design.PreviewWith> <Design.PreviewWith>

2
src/Avalonia.Diagnostics/Diagnostics/Controls/ThicknessEditor.axaml

@ -1,6 +1,6 @@
<Styles xmlns="https://github.com/avaloniaui" <Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Avalonia.Diagnostics.Controls"> xmlns:controls="using:Avalonia.Diagnostics.Controls">
<Styles.Resources> <Styles.Resources>
<SolidColorBrush x:Key="HighlightBorderBrush" Color="CornflowerBlue" /> <SolidColorBrush x:Key="HighlightBorderBrush" Color="CornflowerBlue" />

3
src/Avalonia.Diagnostics/Diagnostics/Screenshots/BaseRenderToStreamHandler.cs

@ -8,9 +8,8 @@ namespace Avalonia.Diagnostics.Screenshots
/// </summary> /// </summary>
public abstract class BaseRenderToStreamHandler : IScreenshotHandler public abstract class BaseRenderToStreamHandler : IScreenshotHandler
{ {
/// <summary> /// <summary>
/// Get stream /// Get stream to write a screenshot to.
/// </summary> /// </summary>
/// <param name="control"></param> /// <param name="control"></param>
/// <returns>stream to render the control</returns> /// <returns>stream to render the control</returns>

31
src/Avalonia.Diagnostics/Diagnostics/Screenshots/FilePickerHandler.cs

@ -1,4 +1,5 @@
using System.IO; using System;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Controls; using Avalonia.Controls;
@ -57,31 +58,25 @@ namespace Avalonia.Diagnostics.Screenshots
return window!; return window!;
} }
protected async override Task<Stream?> GetStream(IControl control) protected override async Task<Stream?> GetStream(IControl control)
{ {
Stream? output = default;
var result = await GetWindow(control).StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions var result = await GetWindow(control).StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
{ {
SuggestedStartLocation = new BclStorageFolder(new DirectoryInfo(ScreenshotsRoot)), SuggestedStartLocation = new BclStorageFolder(new DirectoryInfo(ScreenshotsRoot)),
Title = Title, Title = Title,
FileTypeChoices = new FilePickerFileType[] { new FilePickerFileType("PNG") { Patterns = new string[] { "*.png" } } } FileTypeChoices = new FilePickerFileType[] { new FilePickerFileType("PNG") { Patterns = new string[] { "*.png" } } },
DefaultExtension = ".png"
}); });
if (result is null)
if (result!=null && !string.IsNullOrWhiteSpace(result.Name)) {
return null;
}
if (!result.CanOpenWrite)
{ {
var folder = Path.GetDirectoryName(result.Name); throw new InvalidOperationException("ReadOnly file was opened");
// Directory information for path, or null if path denotes a root directory or is
// null. Returns System.String.Empty if path does not contain directory information.
if (!string.IsNullOrWhiteSpace(folder))
{
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
output = new FileStream(result.Name, FileMode.Create);
}
} }
return output;
return await result.OpenWriteAsync();
} }
} }
} }

4
src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs

@ -292,7 +292,7 @@ namespace Avalonia.Diagnostics.ViewModels
[DependsOn(nameof(TreePageViewModel.SelectedNode))] [DependsOn(nameof(TreePageViewModel.SelectedNode))]
[DependsOn(nameof(Content))] [DependsOn(nameof(Content))]
bool CanShot(object? parameter) public bool CanShot(object? parameter)
{ {
return Content is TreePageViewModel tree return Content is TreePageViewModel tree
&& tree.SelectedNode != null && tree.SelectedNode != null
@ -300,7 +300,7 @@ namespace Avalonia.Diagnostics.ViewModels
&& visual.VisualRoot != null; && visual.VisualRoot != null;
} }
async void Shot(object? parameter) public async void Shot(object? parameter)
{ {
if ((Content as TreePageViewModel)?.SelectedNode?.Visual is IControl control if ((Content as TreePageViewModel)?.SelectedNode?.Visual is IControl control
&& _screenshotHandler is { } && _screenshotHandler is { }

2
src/Avalonia.Diagnostics/Diagnostics/ViewModels/TreePageViewModel.cs

@ -32,7 +32,7 @@ namespace Avalonia.Diagnostics.ViewModels
public TreeNode? SelectedNode public TreeNode? SelectedNode
{ {
get => _selectedNode; get => _selectedNode;
private set set
{ {
if (RaiseAndSetIfChanged(ref _selectedNode, value)) if (RaiseAndSetIfChanged(ref _selectedNode, value))
{ {

4
src/Avalonia.Diagnostics/Diagnostics/Views/ConsoleView.xaml

@ -1,6 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Avalonia.Diagnostics.Views.ConsoleView"> xmlns:viewModels="using:Avalonia.Diagnostics.ViewModels"
x:Class="Avalonia.Diagnostics.Views.ConsoleView"
x:DataType="viewModels:ConsoleViewModel">
<UserControl.Styles> <UserControl.Styles>
<Style Selector="TextBox.console"> <Style Selector="TextBox.console">
<Setter Property="FontFamily" Value="/Assets/Fonts/SourceSansPro-Regular.ttf"/> <Setter Property="FontFamily" Value="/Assets/Fonts/SourceSansPro-Regular.ttf"/>

28
src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml

@ -1,12 +1,13 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:conv="clr-namespace:Avalonia.Diagnostics.Converters" xmlns:conv="using:Avalonia.Diagnostics.Converters"
xmlns:local="clr-namespace:Avalonia.Diagnostics.Views" xmlns:local="using:Avalonia.Diagnostics.Views"
xmlns:controls="clr-namespace:Avalonia.Diagnostics.Controls" xmlns:controls="using:Avalonia.Diagnostics.Controls"
xmlns:vm="clr-namespace:Avalonia.Diagnostics.ViewModels" xmlns:vm="using:Avalonia.Diagnostics.ViewModels"
xmlns:lb="using:Avalonia.Diagnostics.Behaviors" xmlns:lb="using:Avalonia.Diagnostics.Behaviors"
x:Class="Avalonia.Diagnostics.Views.ControlDetailsView" x:Class="Avalonia.Diagnostics.Views.ControlDetailsView"
x:Name="Main"> x:Name="Main"
x:DataType="vm:ControlDetailsViewModel">
<UserControl.Resources> <UserControl.Resources>
<conv:BoolToOpacityConverter x:Key="BoolToOpacity" Opacity="0.6"/> <conv:BoolToOpacityConverter x:Key="BoolToOpacity" Opacity="0.6"/>
@ -58,21 +59,24 @@
CanUserResizeColumns="true" CanUserResizeColumns="true"
DoubleTapped="PropertiesGrid_OnDoubleTapped"> DoubleTapped="PropertiesGrid_OnDoubleTapped">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="Property" Binding="{Binding Name}" IsReadOnly="True" /> <DataGridTextColumn Header="Property" Binding="{Binding Name}" IsReadOnly="True" x:DataType="vm:PropertyViewModel" />
<DataGridTextColumn Header="Value" Binding="{Binding Value}" /> <DataGridTextColumn Header="Value" Binding="{Binding Value}" x:DataType="vm:PropertyViewModel" />
<DataGridTextColumn Header="Type" Binding="{Binding Type}" <DataGridTextColumn Header="Type" Binding="{Binding Type}"
IsReadOnly="True" IsReadOnly="True"
IsVisible="{Binding !$parent[UserControl;2].DataContext.ShowDetailsPropertyType}" IsVisible="{Binding !$parent[UserControl;2].((vm:MainViewModel)DataContext).ShowDetailsPropertyType}"
x:DataType="vm:PropertyViewModel"
/> />
<DataGridTextColumn Header="Assigned Type" Binding="{Binding AssignedType, Converter={StaticResource GetTypeName}}" <DataGridTextColumn Header="Assigned Type" Binding="{Binding AssignedType, Converter={StaticResource GetTypeName}}"
IsReadOnly="True" IsReadOnly="True"
IsVisible="{Binding $parent[UserControl;2].DataContext.ShowDetailsPropertyType}" IsVisible="{Binding $parent[UserControl;2].((vm:MainViewModel)DataContext).ShowDetailsPropertyType}"
x:DataType="vm:PropertyViewModel"
/> />
<DataGridTextColumn Header="Property Type" Binding="{Binding PropertyType, Converter={StaticResource GetTypeName}}" <DataGridTextColumn Header="Property Type" Binding="{Binding PropertyType, Converter={StaticResource GetTypeName}}"
IsReadOnly="True" IsReadOnly="True"
IsVisible="{Binding $parent[UserControl;2].DataContext.ShowDetailsPropertyType}" IsVisible="{Binding $parent[UserControl;2].((vm:MainViewModel)DataContext).ShowDetailsPropertyType}"
x:DataType="vm:PropertyViewModel"
/> />
<DataGridTextColumn Header="Priority" Binding="{Binding Priority}" IsReadOnly="True" /> <DataGridTextColumn Header="Priority" Binding="{Binding Priority}" IsReadOnly="True" x:DataType="vm:PropertyViewModel" />
</DataGrid.Columns> </DataGrid.Columns>
<DataGrid.Styles> <DataGrid.Styles>
@ -124,7 +128,7 @@
<MultiBinding Converter="{x:Static BoolConverters.And}"> <MultiBinding Converter="{x:Static BoolConverters.And}">
<MultiBinding Converter="{x:Static BoolConverters.Or}" > <MultiBinding Converter="{x:Static BoolConverters.Or}" >
<Binding Path="IsActive" /> <Binding Path="IsActive" />
<Binding Path="#Main.DataContext.ShowInactiveStyles" /> <Binding Path="#Main.((vm:ControlDetailsViewModel)DataContext).ShowInactiveStyles" />
</MultiBinding> </MultiBinding>
<Binding Path="IsVisible" /> <Binding Path="IsVisible" />
</MultiBinding> </MultiBinding>

2
src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml.cs

@ -30,7 +30,7 @@ namespace Avalonia.Diagnostics.Views
} }
private void PropertyNamePressed(object sender, PointerPressedEventArgs e) public void PropertyNamePressed(object sender, PointerPressedEventArgs e)
{ {
var mainVm = (ControlDetailsViewModel?) DataContext; var mainVm = (ControlDetailsViewModel?) DataContext;

10
src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml

@ -1,10 +1,10 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl 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="clr-namespace:Avalonia.Diagnostics.ViewModels" xmlns:vm="using:Avalonia.Diagnostics.ViewModels"
xmlns:conv="clr-namespace:Avalonia.Diagnostics.Converters" xmlns:controls="using:Avalonia.Diagnostics.Controls"
xmlns:controls="clr-namespace:Avalonia.Diagnostics.Controls"
x:Class="Avalonia.Diagnostics.Views.EventsPageView" x:Class="Avalonia.Diagnostics.Views.EventsPageView"
Margin="2"> Margin="2"
x:DataType="vm:EventsPageViewModel">
<UserControl.Styles> <UserControl.Styles>
<Style Selector="TextBlock.nav" > <Style Selector="TextBlock.nav" >
<Setter Property="TextDecorations"> <Setter Property="TextDecorations">
@ -52,7 +52,7 @@
</TreeDataTemplate> </TreeDataTemplate>
</TreeView.DataTemplates> </TreeView.DataTemplates>
<TreeView.Styles> <TreeView.Styles>
<Style Selector="TreeViewItem"> <Style Selector="TreeViewItem" x:DataType="vm:EventTreeNodeBase">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsVisible" Value="{Binding IsVisible}" /> <Setter Property="IsVisible" Value="{Binding IsVisible}" />
</Style> </Style>

7
src/Avalonia.Diagnostics/Diagnostics/Views/LayoutExplorerView.axaml

@ -1,9 +1,10 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Avalonia.Diagnostics.Views.LayoutExplorerView" x:Class="Avalonia.Diagnostics.Views.LayoutExplorerView"
xmlns:local="clr-namespace:Avalonia.Diagnostics.Views" xmlns:controls="using:Avalonia.Diagnostics.Controls"
xmlns:controls="clr-namespace:Avalonia.Diagnostics.Controls" xmlns:converters="using:Avalonia.Diagnostics.Converters"
xmlns:converters="clr-namespace:Avalonia.Diagnostics.Converters"> xmlns:viewModels="using:Avalonia.Diagnostics.ViewModels"
x:DataType="viewModels:ControlLayoutViewModel">
<UserControl.Resources> <UserControl.Resources>
<SolidColorBrush x:Key="SizeGuidelineBrush" Color="#333333" /> <SolidColorBrush x:Key="SizeGuidelineBrush" Color="#333333" />

8
src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml

@ -1,7 +1,9 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="clr-namespace:Avalonia.Diagnostics.Views" xmlns:views="using:Avalonia.Diagnostics.Views"
x:Class="Avalonia.Diagnostics.Views.MainView"> xmlns:viewModels="using:Avalonia.Diagnostics.ViewModels"
x:Class="Avalonia.Diagnostics.Views.MainView"
x:DataType="viewModels:MainViewModel">
<Grid Name="rootGrid" RowDefinitions="Auto,Auto,*,Auto,0,Auto"> <Grid Name="rootGrid" RowDefinitions="Auto,Auto,*,Auto,0,Auto">
<Menu> <Menu>
<MenuItem Header="_File"> <MenuItem Header="_File">
@ -38,7 +40,7 @@
</MenuItem> </MenuItem>
</MenuItem> </MenuItem>
<MenuItem Header="_View"> <MenuItem Header="_View">
<MenuItem Header="_Console" Command="{Binding $parent[UserControl].ToggleConsole}"> <MenuItem Header="_Console" Command="{Binding $parent[views:MainView].ToggleConsole}">
<MenuItem.Icon> <MenuItem.Icon>
<CheckBox BorderThickness="0" <CheckBox BorderThickness="0"
IsChecked="{Binding Console.IsVisible}" IsChecked="{Binding Console.IsVisible}"

8
src/Avalonia.Diagnostics/Diagnostics/Views/MainWindow.xaml

@ -1,9 +1,11 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="clr-namespace:Avalonia.Diagnostics.Views" xmlns:views="using:Avalonia.Diagnostics.Views"
xmlns:diag="clr-namespace:Avalonia.Diagnostics" xmlns:diag="using:Avalonia.Diagnostics"
xmlns:viewModels="using:Avalonia.Diagnostics.ViewModels"
Title="Avalonia DevTools" Title="Avalonia DevTools"
x:Class="Avalonia.Diagnostics.Views.MainWindow"> x:Class="Avalonia.Diagnostics.Views.MainWindow"
x:DataType="viewModels:MainViewModel">
<Window.DataTemplates> <Window.DataTemplates>
<diag:ViewLocator/> <diag:ViewLocator/>
</Window.DataTemplates> </Window.DataTemplates>

7
src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml

@ -1,7 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl 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="clr-namespace:Avalonia.Diagnostics.ViewModels" xmlns:vm="using:Avalonia.Diagnostics.ViewModels"
x:Class="Avalonia.Diagnostics.Views.TreePageView"> x:Class="Avalonia.Diagnostics.Views.TreePageView"
x:DataType="vm:TreePageViewModel">
<Grid ColumnDefinitions="0.35*,4,0.65*"> <Grid ColumnDefinitions="0.35*,4,0.65*">
<TreeView Name="tree" <TreeView Name="tree"
BorderThickness="0" BorderThickness="0"
@ -18,7 +19,7 @@
</TreeDataTemplate> </TreeDataTemplate>
</TreeView.DataTemplates> </TreeView.DataTemplates>
<TreeView.Styles> <TreeView.Styles>
<Style Selector="TreeViewItem"> <Style Selector="TreeViewItem" x:DataType="vm:TreeNode">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/> <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
</Style> </Style>

4
src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml

@ -1,5 +1,6 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dialogs="using:Avalonia.Dialogs"
MaxWidth="400" MaxWidth="400"
MaxHeight="475" MaxHeight="475"
MinWidth="430" MinWidth="430"
@ -7,7 +8,8 @@
Title="About Avalonia" Title="About Avalonia"
Background="Purple" Background="Purple"
FontFamily="/Assets/Roboto-Light.ttf#Roboto" FontFamily="/Assets/Roboto-Light.ttf#Roboto"
x:Class="Avalonia.Dialogs.AboutAvaloniaDialog"> x:Class="Avalonia.Dialogs.AboutAvaloniaDialog"
x:DataType="dialogs:AboutAvaloniaDialog">
<Window.Styles> <Window.Styles>
<Style> <Style>
<Style.Resources> <Style.Resources>

11
src/Avalonia.Dialogs/InternalViewModelBase.cs → src/Avalonia.Dialogs/Internal/AvaloniaDialogsInternalViewModelBase.cs

@ -1,16 +1,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using JetBrains.Annotations;
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
internal class InternalViewModelBase : INotifyPropertyChanged public class AvaloniaDialogsInternalViewModelBase : INotifyPropertyChanged
{ {
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator] internal protected bool RaiseAndSetIfChanged<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
protected bool RaiseAndSetIfChanged<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{ {
if (!EqualityComparer<T>.Default.Equals(field, value)) if (!EqualityComparer<T>.Default.Equals(field, value))
{ {
@ -22,8 +20,7 @@ namespace Avalonia.Dialogs
return false; return false;
} }
[NotifyPropertyChangedInvocator] internal protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{ {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
} }

4
src/Avalonia.Dialogs/ChildFitter.cs → src/Avalonia.Dialogs/Internal/ChildFitter.cs

@ -1,8 +1,6 @@
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Layout;
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
public class ChildFitter : Decorator public class ChildFitter : Decorator
{ {

6
src/Avalonia.Dialogs/FileSizeStringConverter.cs → src/Avalonia.Dialogs/Internal/FileSizeStringConverter.cs

@ -1,10 +1,8 @@
using Avalonia.Data.Converters;
using System; using System;
using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Text; using Avalonia.Data.Converters;
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
public class FileSizeStringConverter : IValueConverter public class FileSizeStringConverter : IValueConverter
{ {

4
src/Avalonia.Dialogs/ManagedFileChooserFilterViewModel.cs → src/Avalonia.Dialogs/Internal/ManagedFileChooserFilterViewModel.cs

@ -2,9 +2,9 @@ using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Avalonia.Platform.Storage; using Avalonia.Platform.Storage;
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
internal class ManagedFileChooserFilterViewModel : InternalViewModelBase public class ManagedFileChooserFilterViewModel : AvaloniaDialogsInternalViewModelBase
{ {
private readonly Regex[] _patterns; private readonly Regex[] _patterns;
public string Name { get; } public string Name { get; }

2
src/Avalonia.Dialogs/ManagedFileChooserItemType.cs → src/Avalonia.Dialogs/Internal/ManagedFileChooserItemType.cs

@ -1,4 +1,4 @@
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
public enum ManagedFileChooserItemType public enum ManagedFileChooserItemType
{ {

4
src/Avalonia.Dialogs/ManagedFileChooserItemViewModel.cs → src/Avalonia.Dialogs/Internal/ManagedFileChooserItemViewModel.cs

@ -1,8 +1,8 @@
using System; using System;
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
internal class ManagedFileChooserItemViewModel : InternalViewModelBase public class ManagedFileChooserItemViewModel : AvaloniaDialogsInternalViewModelBase
{ {
private string _displayName; private string _displayName;
private string _path; private string _path;

4
src/Avalonia.Dialogs/ManagedFileChooserNavigationItem.cs → src/Avalonia.Dialogs/Internal/ManagedFileChooserNavigationItem.cs

@ -1,6 +1,6 @@
namespace Avalonia.Dialogs namespace Avalonia.Dialogs.Internal
{ {
internal class ManagedFileChooserNavigationItem public class ManagedFileChooserNavigationItem
{ {
public string DisplayName { get; set; } public string DisplayName { get; set; }
public string Path { get; set; } public string Path { get; set; }

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save