Many nice features

This commit is contained in:
Holger Boerchers 2018-08-14 21:51:18 +02:00
parent 01a90bd460
commit 2b295c9d93
24 changed files with 493 additions and 198 deletions

View File

@ -13,6 +13,10 @@
<assemblyIdentity name="Prism" publicKeyToken="40ee6c3a2184dc59" culture="neutral" /> <assemblyIdentity name="Prism" publicKeyToken="40ee6c3a2184dc59" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.396" newVersion="7.0.0.396" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.396" newVersion="7.0.0.396" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
</configuration> </configuration>

View File

@ -1,8 +1,9 @@
<Application x:Class="MaterialModernWPF.App" <prism:PrismApplication x:Class="MaterialModernWPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MaterialModernWPF" xmlns:local="clr-namespace:MaterialModernWPF"
xmlns:dragablz="http://dragablz.net/winfx/xaml/dragablz"> xmlns:dragablz="http://dragablz.net/winfx/xaml/dragablz"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources> <Application.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
@ -11,12 +12,11 @@
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
<!-- Dragablz Material Design -->
<ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/materialdesign.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<!-- Dragablz Material Design -->
<Style TargetType="{x:Type dragablz:TabablzControl}" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}" />
</ResourceDictionary> </ResourceDictionary>
</Application.Resources> </Application.Resources>
</Application> </prism:PrismApplication>

View File

@ -1,16 +1,39 @@
using System.Windows; using System.Collections.Generic;
using System.Windows;
using MaterialModernWPF.Module;
using MaterialModernWPF.Service;
using MaterialModernWPF.View;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Modularity;
namespace MaterialModernWPF namespace MaterialModernWPF
{ {
/// <summary> /// <summary>
/// Interaktionslogik für "App.xaml" /// Interaktionslogik für "App.xaml"
/// </summary> /// </summary>
public partial class App : Application public partial class App : PrismApplication
{ {
protected override void OnStartup(StartupEventArgs e) protected override void RegisterTypes(IContainerRegistry containerRegistry)
{ {
base.OnStartup(e); containerRegistry.Register<ShellViewModel>();
new Bootstrapper().Run(); containerRegistry.Register<Shell>();
containerRegistry.RegisterSingleton<CalculationPackageContainer>();
containerRegistry.RegisterSingleton<CalculationPackage, DetailedGeometryPackage>();
containerRegistry.RegisterSingleton<CalculationPackage, AdditionalMoments>();
containerRegistry.RegisterForNavigation<DetailedGeometryView>();
}
protected override Window CreateShell()
{
return Container.Resolve<Shell>();
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule(typeof(MainModule));
base.ConfigureModuleCatalog(moduleCatalog);
} }
} }
} }

View File

@ -1,23 +0,0 @@
using System.Windows;
using Autofac;
using Prism.Autofac;
namespace MaterialModernWPF
{
public class Bootstrapper : AutofacBootstrapper
{
protected override void ConfigureContainerBuilder(ContainerBuilder builder)
{
base.ConfigureContainerBuilder(builder);
builder.RegisterType<Shell>();
}
protected override DependencyObject CreateShell() => Container.Resolve<Shell>();
protected override void InitializeShell()
{
Application.Current.MainWindow = Shell as Window;
Application.Current.MainWindow?.Show();
}
}
}

View File

@ -0,0 +1,8 @@
namespace MaterialModernWPF
{
public static class Constants
{
public const string MainRegion = "MainRegion";
public const string PackagesRegion = "PackagesRegion";
}
}

View File

@ -40,14 +40,11 @@
<ApplicationIcon>airballoon.ico</ApplicationIcon> <ApplicationIcon>airballoon.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Autofac, Version=4.8.1.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL"> <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.8.1\lib\net45\Autofac.dll</HintPath> <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll</HintPath>
</Reference> </Reference>
<Reference Include="CommonServiceLocator, Version=2.0.3.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL"> <Reference Include="DryIoc, Version=2.12.10.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\CommonServiceLocator.2.0.3\lib\net45\CommonServiceLocator.dll</HintPath> <HintPath>..\packages\DryIoc.dll.2.12.10\lib\net45\DryIoc.dll</HintPath>
</Reference>
<Reference Include="Dragablz, Version=0.0.3.203, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dragablz.0.0.3.203\lib\net45\Dragablz.dll</HintPath>
</Reference> </Reference>
<Reference Include="MaterialDesignColors, Version=1.1.3.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="MaterialDesignColors, Version=1.1.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialDesignColors.1.1.3\lib\net45\MaterialDesignColors.dll</HintPath> <HintPath>..\packages\MaterialDesignColors.1.1.3\lib\net45\MaterialDesignColors.dll</HintPath>
@ -57,22 +54,22 @@
<HintPath>..\packages\MaterialDesignThemes.2.4.0.1044\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath> <HintPath>..\packages\MaterialDesignThemes.2.4.0.1044\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
</Reference> </Reference>
<Reference Include="ModernWpf.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c99d0cfbea7491ef, processorArchitecture=MSIL"> <Reference Include="ModernWpf.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c99d0cfbea7491ef, processorArchitecture=MSIL">
<HintPath>..\packages\ModernWpf.Core.2.0.0-alpha94\lib\net40-Client\ModernWpf.Core.dll</HintPath> <HintPath>..\packages\ModernWpf.Core.2.0.0-beta01\lib\net40-Client\ModernWpf.Core.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="Prism, Version=7.0.0.396, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL"> <Reference Include="Prism, Version=7.1.0.172, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
<HintPath>..\packages\Prism.Core.7.0.0.396\lib\net45\Prism.dll</HintPath> <HintPath>..\packages\Prism.Core.7.1.0.172-pre\lib\net45\Prism.dll</HintPath>
</Reference> </Reference>
<Reference Include="Prism.Autofac.Wpf, Version=6.3.0.0, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL"> <Reference Include="Prism.DryIoc.Wpf, Version=7.1.0.172, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Prism.Autofac.6.3.0\lib\net45\Prism.Autofac.Wpf.dll</HintPath> <HintPath>..\packages\Prism.DryIoc.7.1.0.172-pre\lib\net45\Prism.DryIoc.Wpf.dll</HintPath>
</Reference> </Reference>
<Reference Include="Prism.Wpf, Version=6.3.0.0, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL"> <Reference Include="Prism.Wpf, Version=7.1.0.172, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
<HintPath>..\packages\Prism.Wpf.6.3.0\lib\net45\Prism.Wpf.dll</HintPath> <HintPath>..\packages\Prism.Wpf.7.1.0.172-pre\lib\net45\Prism.Wpf.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Prism.Wpf.6.3.0\lib\net45\System.Windows.Interactivity.dll</HintPath> <HintPath>..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@ -96,16 +93,30 @@
<DependentUpon>App.xaml</DependentUpon> <DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="InfoDialog.xaml.cs"> <Compile Include="Constants.cs" />
<Compile Include="Module\MainModule.cs" />
<Compile Include="Module\MainView.xaml.cs">
<DependentUpon>MainView.xaml</DependentUpon>
</Compile>
<Compile Include="Module\MainViewModel.cs" />
<Compile Include="Service\CalculationPackage.cs" />
<Compile Include="Service\CalculationPackageContainer.cs" />
<Compile Include="Service\CalculationPackageSelectionChangedEvent.cs" />
<Compile Include="Service\AdditionalMoments.cs" />
<Compile Include="Service\DetailedGeometryPackage.cs" />
<Compile Include="Service\DetailedGeometryView.xaml.cs">
<DependentUpon>DetailedGeometryView.xaml</DependentUpon>
</Compile>
<Compile Include="View\InfoDialog.xaml.cs">
<DependentUpon>InfoDialog.xaml</DependentUpon> <DependentUpon>InfoDialog.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Shell.xaml.cs"> <Compile Include="View\Shell.xaml.cs">
<DependentUpon>Shell.xaml</DependentUpon> <DependentUpon>Shell.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="View\ShellViewModel.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Bootstrapper.cs" />
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
@ -137,15 +148,24 @@
<Resource Include="airballoon.ico" /> <Resource Include="airballoon.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Page Include="InfoDialog.xaml"> <Page Include="Module\MainView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="Shell.xaml"> <Page Include="Service\DetailedGeometryView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="View\InfoDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="View\Shell.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -0,0 +1,22 @@
using System;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;
namespace MaterialModernWPF.Module
{
public class MainModule : IModule
{
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.Register<MainViewModel>();
containerRegistry.RegisterForNavigation<MainView>();
}
public void OnInitialized(IContainerProvider containerProvider)
{
var regionManager = containerProvider.Resolve<IRegionManager>();
regionManager.RequestNavigate(Constants.MainRegion, new Uri(nameof(MainView), UriKind.Relative));
}
}
}

View File

@ -0,0 +1,33 @@
<UserControl
x:Class="MaterialModernWPF.Module.MainView"
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:MaterialModernWPF.Module"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
xmlns:root="clr-namespace:MaterialModernWPF"
d:DataContext="{d:DesignInstance local:MainViewModel}"
d:DesignHeight="450"
d:DesignWidth="800"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="150" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListBox
Grid.Column="0"
DisplayMemberPath="Name"
ItemsSource="{Binding Packages}"
SelectionMode="Multiple">
<ListBox.ItemContainerStyle>
<Style BasedOn="{StaticResource {x:Type ListBoxItem}}" TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
<ItemsControl Grid.Column="1" prism:RegionManager.RegionName="{x:Static root:Constants.PackagesRegion}" />
</Grid>
</UserControl>

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 MaterialModernWPF.Module
{
/// <summary>
/// Interaktionslogik für MainView.xaml
/// </summary>
public partial class MainView : UserControl
{
public MainView()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,18 @@
using System.Collections.Generic;
using DryIoc;
using MaterialModernWPF.Service;
namespace MaterialModernWPF.Module
{
public class MainViewModel
{
private readonly CalculationPackageContainer _container;
public MainViewModel(CalculationPackageContainer container)
{
_container = container;
}
public IEnumerable<CalculationPackage> Packages => _container.CalculationPackages;
}
}

View File

@ -0,0 +1,17 @@
using System;
using Prism.Events;
namespace MaterialModernWPF.Service
{
public class AdditionalMoments : CalculationPackage
{
public AdditionalMoments(IEventAggregator eventAggregator) : base(eventAggregator)
{
Name = "Additional moments";
CalculationViewType = typeof(DetailedGeometryView);
}
public override string Name { get; }
public override Type CalculationViewType { get; }
}
}

View File

@ -0,0 +1,37 @@
using System;
using System.Windows.Controls;
using Prism.Events;
namespace MaterialModernWPF.Service
{
public abstract class CalculationPackage
{
private readonly IEventAggregator _eventAggregator;
private bool _isSelected;
public CalculationPackage(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public abstract string Name { get; }
public bool IsSelected
{
get => _isSelected;
set
{
if (Equals(_isSelected, value)) return;
_isSelected = value;
_eventAggregator.GetEvent<CalculationPackageSelectionChangedEvent>().Publish((this, value));
}
}
public abstract Type CalculationViewType { get; }
}
public class CalculationView : UserControl
{
}
}

View File

@ -0,0 +1,40 @@
using System.Linq;
using DryIoc;
using Prism.Events;
using Prism.Regions;
namespace MaterialModernWPF.Service
{
public class CalculationPackageContainer
{
private readonly IRegionManager _regionManager;
private readonly IResolver _resolver;
public CalculationPackage[] CalculationPackages { get; }
public CalculationPackageContainer(
IEventAggregator eventAggregator, IRegionManager regionManager,
IResolver resolver)
{
_regionManager = regionManager;
_resolver = resolver;
CalculationPackages = resolver.ResolveMany<CalculationPackage>().ToArray();
eventAggregator.GetEvent<CalculationPackageSelectionChangedEvent>().Subscribe(SelectionChanged);
}
private void SelectionChanged((CalculationPackage sender, bool isSelected) payload)
{
var viewKey = payload.sender.CalculationViewType.FullName;
var region = _regionManager.Regions[Constants.PackagesRegion];
if (payload.isSelected)
{
var view = _resolver.Resolve(payload.sender.CalculationViewType);
region.Add(view, viewKey);
}
else
{
var view = region.GetView(viewKey);
region.Remove(view);
}
}
}
}

View File

@ -0,0 +1,9 @@
using Prism.Events;
namespace MaterialModernWPF.Service
{
public class CalculationPackageSelectionChangedEvent : PubSubEvent<(CalculationPackage, bool)>
{
}
}

View File

@ -0,0 +1,17 @@
using System;
using Prism.Events;
namespace MaterialModernWPF.Service
{
public class DetailedGeometryPackage : CalculationPackage
{
public DetailedGeometryPackage(IEventAggregator eventAggregator) : base(eventAggregator)
{
Name = "Detailed Geometry";
CalculationViewType = typeof(DetailedGeometryView);
}
public override string Name { get; }
public override Type CalculationViewType { get; }
}
}

View File

@ -0,0 +1,14 @@
<local:CalculationView
x:Class="MaterialModernWPF.Service.DetailedGeometryView"
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:MaterialModernWPF.Service"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<GroupBox Margin="10" Header="Detailed Geometry">
<TextBlock FontSize="100" Text="Hallo Welt" />
</GroupBox>
</local:CalculationView>

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 MaterialModernWPF.Service
{
/// <summary>
/// Interaktionslogik für DetailedGeometryView.xaml
/// </summary>
public partial class DetailedGeometryView : CalculationView
{
public DetailedGeometryView()
{
InitializeComponent();
}
}
}

View File

@ -1,131 +0,0 @@
<Window x:Class="MaterialModernWPF.Shell"
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:dragablz="http://dragablz.net/winfx/xaml/dragablz"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:materialModernWpf="clr-namespace:MaterialModernWPF"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:modern="http://modernwpf"
xmlns:prism="http://prismlibrary.com/"
x:Name="Window"
Title="NiftyTool NG"
Width="920"
Height="600"
modern:UIHooks.AutoDpiScale="True"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="pack://application:,,,/MaterialDesignThemes.Wpf;component/Resources/Roboto/#Roboto"
Icon="airballoon.ico"
ResizeMode="CanResizeWithGrip"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
mc:Ignorable="d">
<modern:Chrome.Chrome>
<modern:Chrome ActiveBorderBrush="{StaticResource PrimaryHueDarkBrush}" />
</modern:Chrome.Chrome>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<modern:TitleBar Grid.Row="0"
Background="{StaticResource PrimaryHueDarkBrush}"
ShowTitle="False" />
<materialDesign:DialogHost Grid.Row="1" Identifier="RootDialog">
<materialDesign:DialogHost.DialogContent>
<materialModernWpf:InfoDialog />
</materialDesign:DialogHost.DialogContent>
<materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
<materialDesign:DrawerHost.LeftDrawerContent>
<DockPanel MinWidth="212">
<ToggleButton Margin="12"
HorizontalAlignment="Right"
DockPanel.Dock="Top"
IsChecked="{Binding ElementName=MenuToggleButton,
Path=IsChecked,
Mode=TwoWay}"
Style="{StaticResource MaterialDesignHamburgerToggleButton}" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Margin="5"
Text="Favorites" />
<ListBox Grid.Row="1">
<TextBlock Text="WIND020214" />
<TextBlock Text="WIND020248" />
<TextBlock Text="SRV-LSIMCTRL01" />
</ListBox>
<TextBlock Grid.Row="2"
Margin="5"
Text="History" />
<ListBox Grid.Row="3">
<TextBlock Text="WIND020214" />
<TextBlock Text="WIND020248" />
<TextBlock Text="SRV-LSIMCTRL01" />
</ListBox>
</Grid>
</DockPanel>
</materialDesign:DrawerHost.LeftDrawerContent>
<DockPanel>
<materialDesign:ColorZone materialDesign:ShadowAssist.ShadowDepth="Depth2"
DockPanel.Dock="Top"
Mode="PrimaryMid"
Padding="2">
<DockPanel>
<ToggleButton x:Name="MenuToggleButton"
IsChecked="False"
Style="{StaticResource MaterialDesignHamburgerToggleButton}" />
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
<Button materialDesign:ShadowAssist.ShadowDepth="Depth0" Style="{StaticResource MaterialDesignFloatingActionButton}">
<materialDesign:PackIcon Width="32"
Height="32"
Kind="CubeOutline" />
</Button>
<Button materialDesign:ShadowAssist.ShadowDepth="Depth0" Style="{StaticResource MaterialDesignFloatingActionButton}">
<materialDesign:PackIcon Width="32"
Height="32"
Kind="Clippy" />
</Button>
<materialDesign:PopupBox PlacementMode="BottomAndAlignRightEdges" StaysOpen="False">
<StackPanel>
<Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}" Content="Einstellungen" />
<Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}" Content="Info" />
</StackPanel>
</materialDesign:PopupBox>
</StackPanel>
<TextBlock Margin="10,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="22"
Text="{Binding Title,
ElementName=Window}" />
</DockPanel>
</materialDesign:ColorZone>
<dragablz:TabablzControl>
<dragablz:TabablzControl.InterTabController>
<dragablz:InterTabController />
</dragablz:TabablzControl.InterTabController>
<TabItem Header="Tab No. 1" IsSelected="True">
<TextBlock Margin="12"
FontSize="24"
Foreground="{StaticResource MaterialDesignDarkForeground}">
Hello World
</TextBlock>
</TabItem>
<TabItem Header="Tab No. 2">
<TextBlock Margin="12"
FontSize="24"
Foreground="{StaticResource MaterialDesignDarkForeground}">
We Have Tearable Tabs!
</TextBlock>
</TabItem>
</dragablz:TabablzControl>
</DockPanel>
</materialDesign:DrawerHost>
</materialDesign:DialogHost>
</Grid>
</Window>

View File

@ -1,4 +1,4 @@
<UserControl x:Class="MaterialModernWPF.InfoDialog" <UserControl x:Class="MaterialModernWPF.View.InfoDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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"

View File

@ -1,4 +1,4 @@
namespace MaterialModernWPF namespace MaterialModernWPF.View
{ {
/// <summary> /// <summary>
/// Interaktionslogik für InfoDialog.xaml /// Interaktionslogik für InfoDialog.xaml

View File

@ -0,0 +1,120 @@
<Window
x:Class="MaterialModernWPF.View.Shell"
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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:modern="http://modernwpf"
xmlns:prism="http://prismlibrary.com/"
xmlns:root="clr-namespace:MaterialModernWPF"
xmlns:view="clr-namespace:MaterialModernWPF.View"
x:Name="Window"
Title="NiftyTool NG"
Width="920"
Height="600"
modern:UIHooks.AutoDpiScale="True"
prism:ViewModelLocator.AutoWireViewModel="True"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="pack://application:,,,/MaterialDesignThemes.Wpf;component/Resources/Roboto/#Roboto"
ResizeMode="CanResizeWithGrip"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
mc:Ignorable="d">
<modern:Chrome.Chrome>
<modern:Chrome ActiveBorderBrush="{StaticResource PrimaryHueDarkBrush}" />
</modern:Chrome.Chrome>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<modern:TitleBar
Grid.Row="0"
Background="{StaticResource PrimaryHueDarkBrush}"
ShowTitle="False" />
<materialDesign:DialogHost Grid.Row="1" Identifier="RootDialog">
<materialDesign:DialogHost.DialogContent>
<view:InfoDialog />
</materialDesign:DialogHost.DialogContent>
<materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
<materialDesign:DrawerHost.LeftDrawerContent>
<DockPanel MinWidth="212">
<ToggleButton
Margin="12"
HorizontalAlignment="Right"
DockPanel.Dock="Top"
IsChecked="{Binding ElementName=MenuToggleButton, Path=IsChecked, Mode=TwoWay}"
Style="{StaticResource MaterialDesignHamburgerToggleButton}" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock
Grid.Row="0"
Margin="5"
Text="Favorites" />
<ListBox Grid.Row="1">
<TextBlock Text="WIND020214" />
<TextBlock Text="WIND020248" />
<TextBlock Text="SRV-LSIMCTRL01" />
</ListBox>
<TextBlock
Grid.Row="2"
Margin="5"
Text="History" />
<ListBox Grid.Row="3">
<TextBlock Text="WIND020214" />
<TextBlock Text="WIND020248" />
<TextBlock Text="SRV-LSIMCTRL01" />
</ListBox>
</Grid>
</DockPanel>
</materialDesign:DrawerHost.LeftDrawerContent>
<DockPanel>
<materialDesign:ColorZone
Padding="2"
materialDesign:ShadowAssist.ShadowDepth="Depth2"
DockPanel.Dock="Top"
Mode="PrimaryMid">
<DockPanel>
<ToggleButton
x:Name="MenuToggleButton"
IsChecked="False"
Style="{StaticResource MaterialDesignHamburgerToggleButton}" />
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
<Button materialDesign:ShadowAssist.ShadowDepth="Depth0" Style="{StaticResource MaterialDesignFloatingActionButton}">
<materialDesign:PackIcon
Width="32"
Height="32"
Kind="CubeOutline" />
</Button>
<Button materialDesign:ShadowAssist.ShadowDepth="Depth0" Style="{StaticResource MaterialDesignFloatingActionButton}">
<materialDesign:PackIcon
Width="32"
Height="32"
Kind="Clippy" />
</Button>
<materialDesign:PopupBox PlacementMode="BottomAndAlignRightEdges" StaysOpen="False">
<StackPanel>
<Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}" Content="Einstellungen" />
<Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}" Content="Info" />
</StackPanel>
</materialDesign:PopupBox>
</StackPanel>
<TextBlock
Margin="10,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="22"
Text="{Binding Title, ElementName=Window}" />
</DockPanel>
</materialDesign:ColorZone>
<ContentControl prism:RegionManager.RegionName="{x:Static root:Constants.MainRegion}" />
</DockPanel>
</materialDesign:DrawerHost>
</materialDesign:DialogHost>
</Grid>
</Window>

View File

@ -1,4 +1,4 @@
namespace MaterialModernWPF namespace MaterialModernWPF.View
{ {
/// <summary> /// <summary>
/// Interaktionslogik für MainWindow.xaml /// Interaktionslogik für MainWindow.xaml

View File

@ -0,0 +1,11 @@
using Prism.Mvvm;
namespace MaterialModernWPF.View
{
public class ShellViewModel : BindableBase
{
public ShellViewModel()
{
}
}
}

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Autofac" version="4.8.1" targetFramework="net461" /> <package id="CommonServiceLocator" version="2.0.4" targetFramework="net461" />
<package id="CommonServiceLocator" version="2.0.3" targetFramework="net461" /> <package id="DryIoc.dll" version="2.12.10" targetFramework="net461" />
<package id="Dragablz" version="0.0.3.203" targetFramework="net461" />
<package id="MaterialDesignColors" version="1.1.3" targetFramework="net452" /> <package id="MaterialDesignColors" version="1.1.3" targetFramework="net452" />
<package id="MaterialDesignThemes" version="2.4.0.1044" targetFramework="net461" /> <package id="MaterialDesignThemes" version="2.4.0.1044" targetFramework="net461" />
<package id="ModernWpf.Core" version="2.0.0-alpha94" targetFramework="net452" /> <package id="ModernWpf.Core" version="2.0.0-beta01" targetFramework="net461" />
<package id="Prism.Autofac" version="6.3.0" targetFramework="net461" /> <package id="Prism.Core" version="7.1.0.172-pre" targetFramework="net461" />
<package id="Prism.Core" version="7.0.0.396" targetFramework="net461" /> <package id="Prism.DryIoc" version="7.1.0.172-pre" targetFramework="net461" />
<package id="Prism.Wpf" version="6.3.0" targetFramework="net461" /> <package id="Prism.Wpf" version="7.1.0.172-pre" targetFramework="net461" />
<package id="System.ValueTuple" version="4.3.0" targetFramework="net461" />
</packages> </packages>