Move dialog host control to top level as content of window, return back DialogHost demo

This commit is contained in:
appleneko2001
2022-07-05 11:36:09 +09:00
parent 0b2f6ff0b2
commit 04faae2824
3 changed files with 65 additions and 98 deletions
+22 -1
View File
@@ -3,11 +3,12 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:styles="clr-namespace:Material.Styles;assembly=Material.Styles"
xmlns:pages="clr-namespace:Material.Demo.Pages"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:showMeTheXaml="clr-namespace:ShowMeTheXaml;assembly=ShowMeTheXaml.Avalonia"
xmlns:controls="clr-namespace:Material.Styles.Controls;assembly=Material.Styles"
xmlns:dialogHostAvalonia="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia"
xmlns:models="clr-namespace:Material.Demo.Models"
mc:Ignorable="d" WindowStartupLocation="CenterScreen"
Width="1280" Height="720" MinWidth="720"
Title="Material.Demo">
@@ -29,6 +30,22 @@
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
</Window.Styles>
<dialogHostAvalonia:DialogHost Identifier="MainDialogHost" >
<dialogHostAvalonia:DialogHost.DialogContentTemplate>
<DataTemplate DataType="models:Sample2Model" >
<StackPanel>
<TextBlock TextAlignment="Center" >Your lucky number:</TextBlock>
<TextBlock Classes="Body1"
TextAlignment="Center"
Text="{Binding Number}" />
<Button Margin="0 8 0 0"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dialogHostAvalonia:DialogHost}, Path=CloseDialogCommand}" >
THANKS, CLOSE
</Button>
</StackPanel>
</DataTemplate>
</dialogHostAvalonia:DialogHost.DialogContentTemplate>
<controls:SnackbarHost HostName="Root" TemplateApplied="TemplatedControl_OnTemplateApplied">
<controls:NavigationDrawer Name="LeftDrawer" Classes="permanent"
@@ -200,4 +217,8 @@
</DockPanel>
</controls:NavigationDrawer>
</controls:SnackbarHost>
</dialogHostAvalonia:DialogHost>
</Window>
+40 -95
View File
@@ -1,11 +1,11 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels="clr-namespace:Material.Demo.ViewModels"
xmlns:dialogHost="clr-namespace:DialogHost;assembly=DialogHost.Avalonia"
xmlns:models="clr-namespace:Material.Demo.Models"
xmlns:dialogHost="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia"
x:Class="Material.Demo.Pages.DialogDemo"
x:DataType="viewModels:DialogDemoViewModel">
x:DataType="viewModels:DialogDemoViewModel" >
<UserControl.Resources>
<!-- ReSharper disable once Xaml.RedundantResource -->
<StackPanel x:Key="Sample2View">
<ProgressBar Classes="Circle" IsIndeterminate="True" />
<Button Margin="0 16 0 0"
@@ -14,106 +14,51 @@
</Button>
</StackPanel>
</UserControl.Resources>
<!--dialogHost:DialogHost Identifier="MainDialogHost">
<dialogHost:DialogHost.DialogContentTemplate>
<DataTemplate DataType="models:Sample2Model">
<StackPanel>
<TextBlock TextAlignment="Center">Your lucky number:</TextBlock>
<TextBlock Classes="Body1"
TextAlignment="Center"
Text="{Binding Number}" />
<Button Margin="0 8 0 0"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dialogHost:DialogHost}, Path=CloseDialogCommand}">
THANKS, CLOSE
</Button>
</StackPanel>
</DataTemplate>
</dialogHost:DialogHost.DialogContentTemplate>
<StackPanel Margin="16, 0">
<TextBlock Classes="Headline4 Subheadline" Text="Dialogs" />
<WrapPanel>
<WrapPanel.Styles>
<Style Selector="WrapPanel > StackPanel">
<Setter Property="Width" Value="300" />
<Setter Property="MinHeight" Value="300" />
</Style>
<Style Selector="WrapPanel > StackPanel > StackPanel">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="8" />
</Style>
<Style Selector="WrapPanel > StackPanel > StackPanel > StackPanel">
<Setter Property="Margin" Value="8" />
</Style>
</WrapPanel.Styles>
<StackPanel Margin="16, 0" >
<TextBlock Classes="Headline4 Subheadline" Text="Dialogs" />
<Grid ColumnDefinitions="*, *" >
<StackPanel>
<TextBlock Classes="Headline6 Subheadline2" Text="DialogHost" />
<StackPanel>
<TextBlock Classes="Headline6 Subheadline2" Text="From DialogHost" />
<StackPanel>
<TextBlock TextWrapping="Wrap"
Text="Top level dialog with custom corner radius, using OpenDialog, passing content via the Parameter. You can pass a view model, provided a corresponding DataTemplate can be found in the scope of the root DialogHost."/>
<StackPanel Margin="8 8 8 0">
<Button Click="OpenDialogWithView">PASS VIEW</Button>
<Button Click="OpenDialogWithModel">PASS MODEL</Button>
<Button Click="OpenMoreDialogHostExamples">MORE EXAMPLES</Button>
</StackPanel>
<TextBlock TextWrapping="Wrap" >Top level dialog with custom corner radius, using OpenDialog, passing content via the Parameter. You can pass a view model, provided a corresponding DataTemplate can be found in the scope of the root DialogHost.</TextBlock>
<StackPanel Spacing="8" >
<Button Classes="flat" Click="OpenDialogWithView" >PASS VIEW</Button>
<Button Classes="flat" Click="OpenDialogWithModel" >PASS MODEL</Button>
<Button Classes="flat" Click="OpenMoreDialogHostExamples" >MORE EXAMPLES</Button>
</StackPanel>
</StackPanel>
<StackPanel>
<TextBlock Classes="Headline6 Subheadline2" Text="Standalone dialog" />
</StackPanel>
<ItemsControl Items="{CompiledBinding StandaloneDialogItems}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="viewModels:DialogDemoItemViewModel">
<DockPanel Margin="8">
<Button DockPanel.Dock="Top"
Content="{CompiledBinding Header}"
Command="{CompiledBinding Command}" />
<TextBlock Margin="8"
HorizontalAlignment="Center"
TextWrapping="Wrap"
<StackPanel Grid.Column="1" >
<TextBlock Classes="Headline6 Subheadline2" Text="Standalone dialog" />
DockPanel.Dock="Bottom"
<ItemsControl Items="{CompiledBinding StandaloneDialogItems}" >
<ItemsControl.ItemTemplate>
<DataTemplate DataType="viewModels:DialogDemoItemViewModel" >
<DockPanel Margin="8" >
<Button DockPanel.Dock="Top"
Classes="flat"
Content="{CompiledBinding Header}"
Command="{CompiledBinding Command}" />
<TextBlock Margin="8"
HorizontalAlignment="Center"
TextWrapping="Wrap"
Text="{CompiledBinding Result}"
IsVisible="{CompiledBinding Result,
DockPanel.Dock="Bottom"
Text="{CompiledBinding Result}"
IsVisible="{CompiledBinding Result,
Converter={x:Static StringConverters.IsNotNullOrEmpty},
FallbackValue=False}" />
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</WrapPanel>
</StackPanel>
</dialogHost:DialogHost -->
<StackPanel>
<StackPanel>
<TextBlock Classes="Headline6 Subheadline2" Text="Standalone dialog" />
<ItemsControl Items="{CompiledBinding StandaloneDialogItems}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="viewModels:DialogDemoItemViewModel">
<DockPanel Margin="8">
<Button DockPanel.Dock="Top"
Classes="flat"
Content="{CompiledBinding Header}"
Command="{CompiledBinding Command}" />
<TextBlock Margin="8"
HorizontalAlignment="Center"
TextWrapping="Wrap"
DockPanel.Dock="Bottom"
Text="{CompiledBinding Result}"
IsVisible="{CompiledBinding Result,
Converter={x:Static StringConverters.IsNotNullOrEmpty},
FallbackValue=False}" />
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</StackPanel>
</UserControl>
+3 -2
View File
@@ -3,6 +3,7 @@ using System.Diagnostics;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using DialogHostAvalonia;
using Material.Demo.Models;
using Material.Demo.ViewModels;
@@ -24,13 +25,13 @@ namespace Material.Demo.Pages
private void OpenDialogWithView(object? sender, RoutedEventArgs e)
{
DialogHost.DialogHost.Show(this.Resources["Sample2View"]!, "MainDialogHost");
DialogHost.Show(this.Resources["Sample2View"]!, "MainDialogHost");
}
private void OpenDialogWithModel(object? sender, RoutedEventArgs e)
{
// View that associated with this model defined at DialogContentTemplate in DialogDemo.axaml
DialogHost.DialogHost.Show(new Sample2Model(new Random().Next(0, 100)), "MainDialogHost");
DialogHost.Show(new Sample2Model(new Random().Next(0, 100)), "MainDialogHost");
}
private void OpenMoreDialogHostExamples(object? sender, RoutedEventArgs e)