mirror of
				https://github.com/holgerb83/ModernWpfPlayground.git
				synced 2025-10-31 08:11:20 +01:00 
			
		
		
		
	Try to create a prism dialog service with custom modern ui window
This commit is contained in:
		| @@ -1,4 +1,5 @@ | |||||||
| using System.Windows; | using System.Windows; | ||||||
|  | using Dialogs; | ||||||
| using ModernWpf; | using ModernWpf; | ||||||
| using ModernWpfPlayground.Types; | using ModernWpfPlayground.Types; | ||||||
| using Prism.Ioc; | using Prism.Ioc; | ||||||
| @@ -22,6 +23,7 @@ namespace ModernWpfPlayground | |||||||
|         { |         { | ||||||
|             containerRegistry.Register<MainWindow>(); |             containerRegistry.Register<MainWindow>(); | ||||||
|             containerRegistry.Register<MainWindowViewModel>(); |             containerRegistry.Register<MainWindowViewModel>(); | ||||||
|  |             containerRegistry.RegisterDialog<MessageBoxView, MessageBoxViewModel>(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         protected override Window CreateShell() |         protected override Window CreateShell() | ||||||
|   | |||||||
| @@ -242,6 +242,7 @@ | |||||||
|                                         HorizontalAlignment="Stretch" |                                         HorizontalAlignment="Stretch" | ||||||
|                                         Command="{Binding SaveViewModelCommand}" |                                         Command="{Binding SaveViewModelCommand}" | ||||||
|                                         Content="Save" /> |                                         Content="Save" /> | ||||||
|  |                                     <Button Command="{Binding ShowDialogServiceCommand}" Content="Show dialog" /> | ||||||
|                                 </ui:SimpleStackPanel> |                                 </ui:SimpleStackPanel> | ||||||
|                             </Grid> |                             </Grid> | ||||||
|                         </ScrollViewer> |                         </ScrollViewer> | ||||||
| @@ -275,7 +276,8 @@ | |||||||
|                                         x:Name="TextBoxSwitch" |                                         x:Name="TextBoxSwitch" | ||||||
|                                         Grid.Column="0" |                                         Grid.Column="0" | ||||||
|                                         Width="145" |                                         Width="145" | ||||||
|                                         Margin="0,0,5,0"> |                                         Margin="0,0,5,0" | ||||||
|  |                                         VerticalAlignment="Top"> | ||||||
|                                         <ToggleButton.Style> |                                         <ToggleButton.Style> | ||||||
|                                             <Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="ToggleButton"> |                                             <Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="ToggleButton"> | ||||||
|                                                 <Setter Property="Content" Value="Read/Write" /> |                                                 <Setter Property="Content" Value="Read/Write" /> | ||||||
| @@ -289,8 +291,12 @@ | |||||||
|                                     </ToggleButton> |                                     </ToggleButton> | ||||||
|                                     <TextBox |                                     <TextBox | ||||||
|                                         Grid.Column="1" |                                         Grid.Column="1" | ||||||
|  |                                         AcceptsReturn="True" | ||||||
|  |                                         AcceptsTab="True" | ||||||
|                                         IsReadOnly="{Binding IsChecked, ElementName=TextBoxSwitch}" |                                         IsReadOnly="{Binding IsChecked, ElementName=TextBoxSwitch}" | ||||||
|                                         Text="Eine einfache Textbox" /> |                                         MinLines="4" | ||||||
|  |                                         Text="{Binding MultiLineText}" | ||||||
|  |                                         TextWrapping="Wrap" /> | ||||||
|                                 </Grid> |                                 </Grid> | ||||||
|                                 <controls:PropertyPresenter Label="Hello" Value="{Binding BooleanValue}" /> |                                 <controls:PropertyPresenter Label="Hello" Value="{Binding BooleanValue}" /> | ||||||
|                                 <controls:PropertyPresenter Label="Hello"> |                                 <controls:PropertyPresenter Label="Hello"> | ||||||
|   | |||||||
| @@ -3,10 +3,12 @@ using System.IO; | |||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| using System.Windows; | using System.Windows; | ||||||
| using System.Windows.Input; | using System.Windows.Input; | ||||||
|  | using Dialogs; | ||||||
| using Microsoft.Win32; | using Microsoft.Win32; | ||||||
| using ModernWpfPlayground.MvvmStuff; | using ModernWpfPlayground.MvvmStuff; | ||||||
| using ModernWpfPlayground.Types; | using ModernWpfPlayground.Types; | ||||||
| using Prism.Commands; | using Prism.Commands; | ||||||
|  | using Prism.Services.Dialogs; | ||||||
| using YamlDotNet.Serialization; | using YamlDotNet.Serialization; | ||||||
| using static ModernWpf.ThemeManager; | using static ModernWpf.ThemeManager; | ||||||
|  |  | ||||||
| @@ -15,14 +17,16 @@ namespace ModernWpfPlayground | |||||||
|     // ReSharper disable once ClassNeverInstantiated.Global |     // ReSharper disable once ClassNeverInstantiated.Global | ||||||
|     public class MainWindowViewModel : BaseViewModel |     public class MainWindowViewModel : BaseViewModel | ||||||
|     { |     { | ||||||
|  |         private readonly IDialogService _service; | ||||||
|         private const string AppName = "TaBEA 3.0.0"; |         private const string AppName = "TaBEA 3.0.0"; | ||||||
|         private string? _path; |         private string? _path; | ||||||
|         private string _title = AppName; |         private string _title = AppName; | ||||||
|         private readonly ISerializer _serializer; |         private readonly ISerializer _serializer; | ||||||
|         private readonly IDeserializer _deserializer; |         private readonly IDeserializer _deserializer; | ||||||
|  |  | ||||||
|         public MainWindowViewModel() |         public MainWindowViewModel(IDialogService service) | ||||||
|         { |         { | ||||||
|  |             _service = service; | ||||||
|             ShowDialogCommand = new DelegateCommand(ShowDialog); |             ShowDialogCommand = new DelegateCommand(ShowDialog); | ||||||
|             CloseCommand = new DelegateCommand(() => Application.Current.Shutdown()); |             CloseCommand = new DelegateCommand(() => Application.Current.Shutdown()); | ||||||
|             OpenViewModelCommand = new DelegateCommand(LoadViewModel); |             OpenViewModelCommand = new DelegateCommand(LoadViewModel); | ||||||
| @@ -121,6 +125,25 @@ namespace ModernWpfPlayground | |||||||
|             set => SetProperty(value); |             set => SetProperty(value); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         public string MultiLineText | ||||||
|  |         { | ||||||
|  |             get => GetProperty("Multi line"); | ||||||
|  |             set => SetProperty(value); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public ICommand ShowDialogServiceCommand => new DelegateCommand(ShowDialogService); | ||||||
|  |  | ||||||
|  |         private void ShowDialogService() | ||||||
|  |         { | ||||||
|  |             void executeCallBack(IDialogResult result) | ||||||
|  |             { | ||||||
|  |  | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             _service.Show(nameof(MessageBoxView), default, executeCallBack); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|         private static void SetTheme(ThemeMode themeMode) => Current.ApplicationTheme = themeMode.ToApplicationTheme(); |         private static void SetTheme(ThemeMode themeMode) => Current.ApplicationTheme = themeMode.ToApplicationTheme(); | ||||||
|  |  | ||||||
|         private void ShowDialog() |         private void ShowDialog() | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
|  |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="FastMember" Version="1.5.0" /> |     <PackageReference Include="FastMember" Version="1.5.0" /> | ||||||
|     <PackageReference Include="ModernWpfUI" Version="0.9.0" /> |     <PackageReference Include="ModernWpfUI" Version="0.9.1" /> | ||||||
|     <PackageReference Include="Prism.DryIoc" Version="8.0.0.1740-pre" /> |     <PackageReference Include="Prism.DryIoc" Version="8.0.0.1740-pre" /> | ||||||
|     <PackageReference Include="Prism.Wpf" Version="8.0.0.1740-pre" /> |     <PackageReference Include="Prism.Wpf" Version="8.0.0.1740-pre" /> | ||||||
|     <PackageReference Include="YamlDotNet" Version="8.1.2" /> |     <PackageReference Include="YamlDotNet" Version="8.1.2" /> | ||||||
| @@ -19,6 +19,7 @@ | |||||||
|  |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ProjectReference Include="..\Controls\Controls.csproj" /> |     <ProjectReference Include="..\Controls\Controls.csproj" /> | ||||||
|  |     <ProjectReference Include="..\Dialogs\Dialogs.csproj" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
| </Project> | </Project> | ||||||
| @@ -18,9 +18,9 @@ namespace ModernWpfPlayground.Types | |||||||
|         { |         { | ||||||
|             return accentColor switch |             return accentColor switch | ||||||
|             { |             { | ||||||
|                 AccentColors.Green => Color.FromRgb(0, 86, 76), |                 AccentColors.Green => Color.FromRgb(33, 115, 70), | ||||||
|                 AccentColors.Yellow => Color.FromRgb(164, 144, 0), |                 AccentColors.Yellow => Color.FromRgb(164, 144, 0), | ||||||
|                 AccentColors.Blue => Color.FromRgb(0, 120, 215), |                 AccentColors.Blue => Color.FromRgb(43, 87, 154), | ||||||
|                 AccentColors.Purple => Color.FromRgb(104, 33, 122), |                 AccentColors.Purple => Color.FromRgb(104, 33, 122), | ||||||
|                 AccentColors.Red => Color.FromRgb(183, 71, 42), |                 AccentColors.Red => Color.FromRgb(183, 71, 42), | ||||||
|                 _ => throw new ArgumentOutOfRangeException(nameof(accentColor), accentColor, null) |                 _ => throw new ArgumentOutOfRangeException(nameof(accentColor), accentColor, null) | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|  |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="ModernWpfUI" Version="0.9.0" /> |     <PackageReference Include="ModernWpfUI" Version="0.9.1" /> | ||||||
|     <PackageReference Include="System.Drawing.Common" Version="4.7.0" /> |     <PackageReference Include="System.Drawing.Common" Version="4.7.0" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								Dialogs/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Dialogs/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | using System.Windows; | ||||||
|  |  | ||||||
|  | [assembly: ThemeInfo( | ||||||
|  |     ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located | ||||||
|  |                                      //(used if a resource is not found in the page, | ||||||
|  |                                      // or application resource dictionaries) | ||||||
|  |     ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located | ||||||
|  |                                               //(used if a resource is not found in the page, | ||||||
|  |                                               // app, or any theme specific resource dictionaries) | ||||||
|  | )] | ||||||
							
								
								
									
										32
									
								
								Dialogs/DialogService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								Dialogs/DialogService.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | //using System; | ||||||
|  | //using Prism.Services.Dialogs; | ||||||
|  |  | ||||||
|  | //namespace Dialogs | ||||||
|  | //{ | ||||||
|  | //    public class DialogService : IDialogService | ||||||
|  | //    { | ||||||
|  | //        /// <inheritdoc /> | ||||||
|  | //        public void Show(string name, IDialogParameters parameters, Action<IDialogResult> callback) | ||||||
|  | //        { | ||||||
|  | //            TODO_IMPLEMENT_ME(); | ||||||
|  | //        } | ||||||
|  |  | ||||||
|  | //        /// <inheritdoc /> | ||||||
|  | //        public void Show(string name, IDialogParameters parameters, Action<IDialogResult> callback, string windowName) | ||||||
|  | //        { | ||||||
|  | //            TODO_IMPLEMENT_ME(); | ||||||
|  | //        } | ||||||
|  |  | ||||||
|  | //        /// <inheritdoc /> | ||||||
|  | //        public void ShowDialog(string name, IDialogParameters parameters, Action<IDialogResult> callback) | ||||||
|  | //        { | ||||||
|  | //            TODO_IMPLEMENT_ME(); | ||||||
|  | //        } | ||||||
|  |  | ||||||
|  | //        /// <inheritdoc /> | ||||||
|  | //        public void ShowDialog(string name, IDialogParameters parameters, Action<IDialogResult> callback, string windowName) | ||||||
|  | //        { | ||||||
|  | //            TODO_IMPLEMENT_ME(); | ||||||
|  | //        } | ||||||
|  | //    } | ||||||
|  | //} | ||||||
							
								
								
									
										18
									
								
								Dialogs/Dialogs.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Dialogs/Dialogs.csproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> | ||||||
|  |  | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <TargetFramework>netcoreapp3.1</TargetFramework> | ||||||
|  |     <UseWPF>true</UseWPF> | ||||||
|  |   </PropertyGroup> | ||||||
|  |  | ||||||
|  |   <ItemGroup> | ||||||
|  |     <PackageReference Include="Prism.Wpf" Version="8.0.0.1740-pre" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |  | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Reference Include="ModernWpf.Controls"> | ||||||
|  |       <HintPath>..\..\..\.nuget\packages\modernwpfui\0.9.1\lib\netcoreapp3.0\ModernWpf.Controls.dll</HintPath> | ||||||
|  |     </Reference> | ||||||
|  |   </ItemGroup> | ||||||
|  |  | ||||||
|  | </Project> | ||||||
							
								
								
									
										27
									
								
								Dialogs/MessageBoxView.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Dialogs/MessageBoxView.xaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | <ui:ContentDialog | ||||||
|  |     x:Class="Dialogs.MessageBoxView" | ||||||
|  |     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||||||
|  |     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||||||
|  |     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||||||
|  |     xmlns:local="clr-namespace:Dialogs" | ||||||
|  |     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||||||
|  |     xmlns:mvvm="http://prismlibrary.com/" | ||||||
|  |     xmlns:ui="http://schemas.modernwpf.com/2019" | ||||||
|  |     Title="Save your work?" | ||||||
|  |     d:DataContext="{d:DesignInstance local:MessageBoxViewModel}" | ||||||
|  |     d:DesignHeight="450" | ||||||
|  |     d:DesignWidth="800" | ||||||
|  |     mvvm:ViewModelLocator.AutoWireViewModel="True" | ||||||
|  |     CloseButtonText="Cancel" | ||||||
|  |     DefaultButton="Primary" | ||||||
|  |     PrimaryButtonCommand="{Binding CloseDialogCommand}" | ||||||
|  |     PrimaryButtonCommandParameter="true" | ||||||
|  |     PrimaryButtonText="Save" | ||||||
|  |     SecondaryButtonText="Don't Save" | ||||||
|  |     mc:Ignorable="d"> | ||||||
|  |     <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> | ||||||
|  |         <!--  Content body  --> | ||||||
|  |         <TextBlock Text="Lorem ipsum dolor sit amet, adipisicing elit." TextWrapping="Wrap" /> | ||||||
|  |         <CheckBox Content="Upload your content to the cloud." /> | ||||||
|  |     </StackPanel> | ||||||
|  | </ui:ContentDialog> | ||||||
							
								
								
									
										26
									
								
								Dialogs/MessageBoxView.xaml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Dialogs/MessageBoxView.xaml.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Text; | ||||||
|  | using System.Windows; | ||||||
|  | using System.Windows.Controls; | ||||||
|  | using System.Windows.Data; | ||||||
|  | using System.Windows.Documents; | ||||||
|  | using System.Windows.Input; | ||||||
|  | using System.Windows.Media; | ||||||
|  | using System.Windows.Media.Imaging; | ||||||
|  | using System.Windows.Navigation; | ||||||
|  | using System.Windows.Shapes; | ||||||
|  |  | ||||||
|  | namespace Dialogs | ||||||
|  | { | ||||||
|  |     /// <summary> | ||||||
|  |     /// Interaktionslogik für MessageBoxView.xaml | ||||||
|  |     /// </summary> | ||||||
|  |     public partial class MessageBoxView | ||||||
|  |     { | ||||||
|  |         public MessageBoxView() | ||||||
|  |         { | ||||||
|  |             InitializeComponent(); | ||||||
|  |          } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										50
									
								
								Dialogs/MessageBoxViewModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Dialogs/MessageBoxViewModel.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | |||||||
|  | using System; | ||||||
|  | using Prism.Commands; | ||||||
|  | using Prism.Services.Dialogs; | ||||||
|  |  | ||||||
|  | namespace Dialogs | ||||||
|  | { | ||||||
|  |     public class MessageBoxViewModel : IDialogAware | ||||||
|  |     { | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public bool CanCloseDialog() | ||||||
|  |         { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public void OnDialogClosed() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public void OnDialogOpened(IDialogParameters parameters) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public string Title { get; } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         private DelegateCommand<string> _closeDialogCommand; | ||||||
|  |         public DelegateCommand<string> CloseDialogCommand => _closeDialogCommand ??= new DelegateCommand<string>(CloseDialog); | ||||||
|  |  | ||||||
|  |         private void CloseDialog(string obj) | ||||||
|  |         { | ||||||
|  |             if (obj == "true") | ||||||
|  |             { | ||||||
|  |                 RaiseRequestClose(new DialogResult(ButtonResult.OK)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public event Action<IDialogResult> RequestClose; | ||||||
|  |  | ||||||
|  |         public virtual void RaiseRequestClose(IDialogResult dialogResult) | ||||||
|  |         { | ||||||
|  |             RequestClose?.Invoke(dialogResult); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModernWpfPlayground", "App\ | |||||||
| EndProject | EndProject | ||||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls", "Controls\Controls.csproj", "{3884FD41-5A46-4A67-A147-57C36F0059DC}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls", "Controls\Controls.csproj", "{3884FD41-5A46-4A67-A147-57C36F0059DC}" | ||||||
| EndProject | EndProject | ||||||
|  | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dialogs", "Dialogs\Dialogs.csproj", "{56468B07-B709-43E9-8FB9-54EDD5219D69}" | ||||||
|  | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
| 		Debug|Any CPU = Debug|Any CPU | 		Debug|Any CPU = Debug|Any CPU | ||||||
| @@ -21,6 +23,10 @@ Global | |||||||
| 		{3884FD41-5A46-4A67-A147-57C36F0059DC}.Debug|Any CPU.Build.0 = Debug|Any CPU | 		{3884FD41-5A46-4A67-A147-57C36F0059DC}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
| 		{3884FD41-5A46-4A67-A147-57C36F0059DC}.Release|Any CPU.ActiveCfg = Release|Any CPU | 		{3884FD41-5A46-4A67-A147-57C36F0059DC}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
| 		{3884FD41-5A46-4A67-A147-57C36F0059DC}.Release|Any CPU.Build.0 = Release|Any CPU | 		{3884FD41-5A46-4A67-A147-57C36F0059DC}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 		{56468B07-B709-43E9-8FB9-54EDD5219D69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{56468B07-B709-43E9-8FB9-54EDD5219D69}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{56468B07-B709-43E9-8FB9-54EDD5219D69}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{56468B07-B709-43E9-8FB9-54EDD5219D69}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(SolutionProperties) = preSolution | 	GlobalSection(SolutionProperties) = preSolution | ||||||
| 		HideSolutionNode = FALSE | 		HideSolutionNode = FALSE | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user