2015-05-22 226 views
1

我試圖用Orchestra框架創建自定義MahApps.Metro窗口。Orchestra.MahApps自定義窗口

我已經複製了currennt ShellWindow內容(包括視圖和代碼)並創建了自己的窗口。然後在App.xaml.cs我用我的窗口,而不是ShellWindow這樣的:

shellService.CreateWithSplash<MyShellWindowView>() 

而問題是,這個窗口是不正確的風格(例如,最小化/最大/關閉按鈕)

problem

這裏是我的窗口:

<orchestra:MetroDataWindow x:Class="CatelApp.Views.MyShellWindowView" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:catel="http://catel.codeplex.com" 
         xmlns:orchestra="https://github.com/orcomp/orchestra" 
         SaveWindowPosition="False" d:DesignHeight="696" d:DesignWidth="480" mc:Ignorable="d"> 

    <orchestra:MetroDataWindow.Resources> 
    <ResourceDictionary> 
     <Style TargetType="catel:TabControl" BasedOn="{StaticResource {x:Type TabControl}}" /> 
    </ResourceDictionary> 
    </orchestra:MetroDataWindow.Resources> 

    <Border x:Name="border" BorderThickness="1"> 
    <DockPanel LastChildFill="True" Margin="15, 5, 15, 5"> 

     <StatusBar x:Name="statusBar" DockPanel.Dock="Bottom"> 
     <orchestra:AnimatingTextBlock x:Name="statusTextBlock" HorizontalAlignment="Left" VerticalAlignment="Center"> 
      <orchestra:AnimatingTextBlock.ShowStoryboard> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1.0" Duration="0:0:0.2"/> 
      </Storyboard> 
      </orchestra:AnimatingTextBlock.ShowStoryboard> 
      <orchestra:AnimatingTextBlock.HideStoryboard> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.0" Duration="0:0:0.2"/> 
      </Storyboard> 
      </orchestra:AnimatingTextBlock.HideStoryboard> 
     </orchestra:AnimatingTextBlock> 
     </StatusBar> 

     <ContentControl x:Name="contentControl" /> 
    </DockPanel> 
    </Border> 

</orchestra:MetroDataWindow> 

和代碼背後

namespace CatelApp.Views 
{ 
    /// <summary> 
    /// Interaction logic for MyShellWindowViewModel.xaml 
    /// </summary> 
    public partial class MyShellWindowView : MetroDataWindow, IShell 
    { 
     #region Constructors 

     /// <summary> 
     /// Initializes a new instance of the <see cref="ShellWindow"/> class. 
     /// </summary> 
     public MyShellWindowView() 
     { 
      var serviceLocator = ServiceLocator.Default; 

      var themeService = serviceLocator.ResolveType<IThemeService>(); 
      ThemeHelper.EnsureApplicationThemes(GetType().Assembly, themeService.ShouldCreateStyleForwarders()); 

      MahAppsHelper.ApplyTheme(); 

      InitializeComponent(); 

      var accentColorBrush = ThemeHelper.GetAccentColorBrush(); 
      border.BorderBrush = accentColorBrush; 

      var statusService = serviceLocator.ResolveType<IStatusService>(); 
      statusService.Initialize(statusTextBlock); 

      var commandManager = serviceLocator.ResolveType<ICommandManager>(); 
      var flyoutService = serviceLocator.ResolveType<IFlyoutService>(); 
      var mahAppsService = serviceLocator.ResolveType<IMahAppsService>(); 

      serviceLocator.RegisterInstance<IAboutInfoService>(mahAppsService); 

      var flyouts = new FlyoutsControl(); 
      foreach (var flyout in flyoutService.GetFlyouts()) 
      { 
       flyouts.Items.Add(flyout); 
      } 

      Flyouts = flyouts; 

      var windowCommands = mahAppsService.GetRightWindowCommands(); 

      if (mahAppsService.GetAboutInfo() != null) 
      { 
//    var aboutWindowCommand = WindowCommandHelper.CreateWindowCommandButton("appbar_information", "about"); 

//    var aboutService = serviceLocator.ResolveType<IAboutService>(); 
//    commandManager.RegisterAction("Help.About", aboutService.ShowAbout); 
//    aboutWindowCommand.Command = commandManager.GetCommand("Help.About"); 

//    windowCommands.Items.Add(aboutWindowCommand); 
      } 

      RightWindowCommands = windowCommands; 

      var mainView = mahAppsService.GetMainView(); 
      contentControl.Content = mainView; 

      SetBinding(TitleProperty, new Binding("ViewModel.Title") {Source = mainView}); 
     } 

     #endregion 
    } 
} 

回答

2

您是否在應用程序資源中包含MahApps主題?例如,見下面的代碼:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Resources/Icons.xaml" /> 

    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" /> 

    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedTabControl.xaml" /> 
</ResourceDictionary.MergedDictionaries>