Material design part 2 - build dialog

原文:Material design part 2 - build dialog

With the latest version 2.6 of MaterialDesignInXamlToolkit I decided to make a series of posts on MaterialDesignXamlToolkit. In this first post we will look at how to change the themes in our #WPF application with PowerShell. Thank to Kevin Bost @kitokeboo. In this new Part we focused on Dialog in MaterielDesignXamlToolkit.

1.Dialogs

The Material Design In XAML Toolkit’s dialogs implementation is designed to:

  • Provide correct styling
  • Allow any dialog to be constructed
  • Compatible with code-behind
  • Compatible with MVVM
  • Compatible with pure XAML
  • Work in applications with multiple windows

Dialogs are asynchronous so at some point you will have to deal with that in your code.

2.Ok but with which Control ?

The DialogHost control. It’s a content control, meaning the underlying content over which the popup dialog will be displayed can be targeted; to a specific area of your app, or the entire Window content.

<materialDesign:DialogHost>
    <materialDesign:DialogHost.DialogContent>
        <dialogContent />
    </materialDesign:DialogHost.DialogContent> <mainContent /> </materialDesign:DialogHost> 

It’s also possible to use DialogHost.DialogContentTemplate in order to define StyleFont etc…

When the dialog is open, the underlying content will be disabled.

3 How to show and close Dialog

3.1 Open with XAML

There is a RoutedCommand can pe implemented in your Button via the CommandParameter with the this code :

<Button Command="{x:Static md:DialogHost.OpenDialogCommand}" />

3.2 Open with Property IsOpen

Now The Controls <materialDesign:DialogHost/> have a Property IsOpen wich accept value : True or False

My XAML Code :

<materialDesign:DialogHost Name="Dialog1">
        <materialDesign:DialogHost.DialogContent> <StackPanel Margin="15"> <TextBlock Margin="10" Text="My First dialog" /> <CheckBox Name="Check_Me" Content="Check me"/> <Button Margin="10" Name="Close_ME" Content="Close" /> </StackPanel> </materialDesign:DialogHost.DialogContent> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Name="Show" Content="Show Dialog" Margin="0,0,0,10"/> </StackPanel> </materialDesign:DialogHost> 

My PS1 Code :

$Show = $Form.findname("Show") $Dialog = $Form.findname("Dialog1") $Check_ME = $Form.findname("Check_Me") $Close = $Form.findname("Close_ME") $Show.add_Click({ $Dialog.IsOpen = $True }) $Close.add_Click({ $Dialog.IsOpen = $False })

3.1 One example with a CheckBox

In this example the first Dialog here the code :

My XAML Code :

<materialDesign:DialogHost Name="Dialog1">
        <materialDesign:DialogHost.DialogContent> <StackPanel Margin="15"> <TextBlock Margin="10" Text="My First dialog" /> <CheckBox Name="Check_Me" Content="Check me"/> <Button Margin="10" Name="Close_ME" Content="Close" /> </StackPanel> </materialDesign:DialogHost.DialogContent> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Name="Show" Content="Show Dialog" Margin="0,0,0,10"/> </StackPanel> </materialDesign:DialogHost> 

My PS1 Code :

[System.Reflection.Assembly]::LoadWithPartialName('presentationframework') |Out-Null [System.Reflection.Assembly]::LoadFrom("assembly\System.Windows.Interactivity.dll") | Out-Null [System.Reflection.Assembly]::LoadFrom("assembly\MaterialDesignThemes.Wpf.dll") | Out-Null [System.Reflection.Assembly]::LoadFrom("assembly\MaterialDesignColors.dll") | Out-Null [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null function LoadXml ($global:filename) { $XamlLoader=(New-Object System.Xml.XmlDocument) $XamlLoader.Load($filename) return $XamlLoader } $XamlMainWindow=LoadXml("MonInterface.xaml") $Reader=(New-Object System.Xml.XmlNodeReader $XamlMainWindow) $Form=[Windows.Markup.XamlReader]::Load($Reader) $Show = $Form.findname("Show") $Dialog = $Form.findname("Dialog1") $Check_ME = $Form.findname("Check_Me") $Close = $Form.findname("Close_ME") $Show.add_Click({ $Dialog.IsOpen = $True }) $Close.add_Click({ if ($Check_ME.IsChecked -eq $true) { [System.Windows.Forms.MessageBox]::Show("You close the Dialog with the CheckBox Checked") $Check_ME.IsChecked = $False } else { [System.Windows.Forms.MessageBox]::Show("You close the Dialog without the CheckBox Checked") } $Dialog.IsOpen = $False }) $Form.ShowDialog() | Out-Null

Password_demo

3.2 Example Credential

My XAML Code :

<materialDesign:DialogHost Name="Dialog1">
        <materialDesign:DialogHost.DialogContent> <StackPanel Margin="15"> <StackPanel Orientation="Vertical"> <TextBlock Margin="10" Text="Enter your Credential" /> <TextBox Name="Name" materialDesign:HintAssist.Hint="Name" /> <PasswordBox Name="PasswordBox" materialDesign:HintAssist.Hint="Floating Password" materialDesign:HintAssist.Foreground="Green" materialDesign:TextFieldAssist.UnderlineBrush="Green" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" /> </StackPanel> <Button Margin="10" Name="Close_ME" Content="Close" /> </StackPanel> </materialDesign:DialogHost.DialogContent> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Name="Show" Content="Show Dialog" Margin="0,0,0,10"/> </StackPanel> </materialDesign:DialogHost> 

My PS1 Code :

[System.Reflection.Assembly]::LoadWithPartialName('presentationframework') |Out-Null [System.Reflection.Assembly]::LoadFrom("assembly\System.Windows.Interactivity.dll") | Out-Null [System.Reflection.Assembly]::LoadFrom("assembly\MaterialDesignThemes.Wpf.dll") | Out-Null [System.Reflection.Assembly]::LoadFrom("assembly\MaterialDesignColors.dll") | Out-Null [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null function LoadXml ($global:filename) { $XamlLoader=(New-Object System.Xml.XmlDocument) $XamlLoader.Load($filename) return $XamlLoader } $XamlMainWindow=LoadXml("MonInterface.xaml") $Reader=(New-Object System.Xml.XmlNodeReader $XamlMainWindow) $Form=[Windows.Markup.XamlReader]::Load($Reader) $Show = $Form.findname("Show") $Dialog = $Form.findname("Dialog1") $Name = $Form.findname("Name") $Password= $Form.findname("PasswordBox") $Close = $Form.findname("Close_ME") $Show.add_Click({ $Dialog.IsOpen = $True }) $Close.add_Click({ #find value from Controls $MSG1 = $Name.Text $MSG2 = $Password.password.tostring() [System.Windows.Forms.MessageBox]::Show("You name is $MSG1 with the Password $MSG2") $Dialog.IsOpen = $False }) $Form.ShowDialog() | Out-Null

Password_demo

4 Dialogs whit ItemList

Demo

5 For the Fun you can also In Dialog launch a web page

Fun

My project is available on Github here

Thanks for reading.

Written by Jérôme Bezet-Torres @JM2K69.


 

猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/12179048.html
今日推荐