2016-11-18 102 views
0

我創建一個新的WPF應用程序(我的第一個WPF應用程序):MVVM光導航服務 - 更改主窗口標題和尺寸

  • .NET 4.0
  • MVVM光
  • C#
  • MahApps Metro

我已經在MVVM Light中使用導航服務實現了導航。我使用MainWindow和Pages來完成相同的操作。

在我MainWindow.xaml我有一個改變我目前的瀏覽大型機:

<Controls:MetroWindow x:Class="App.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
     xmlns:resx="clr-namespace:MaverickDesktop.Resources" 
     Title="My title" 
     Height="280" 
     Width="500"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 

    <Frame Source="\Views\LoginView.xaml" NavigationUIVisibility="Hidden" Name="MainFrame"></Frame> 

</Controls:MetroWindow> 

這是我LoginView.xaml頁:

<Page x:Class="App.Views.LoginView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro" 
     Dialog:DialogParticipation.Register="{Binding}" 
     mc:Ignorable="d" 
     xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
     xmlns:resx="clr-namespace:MaverickDesktop.Resources" 
     Height="500" 
     Width="700" 
     xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" 
     DataContext="{Binding Main, Source={StaticResource Locator}}" 
     > 

    <Grid Margin="0,0,0,10"> 
     <Label Content="User:" HorizontalAlignment="Left" Margin="24,37,0,0" VerticalAlignment="Top" FontSize="24"/> 
     <Label Content="Password:" HorizontalAlignment="Left" Margin="24,96,0,0" VerticalAlignment="Top" FontSize="24"/> 
     <TextBox HorizontalAlignment="Left" Height="42" Margin="172,37,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="274" Name="txtUser" FontSize="24" Controls:TextBoxHelper.ClearTextButton="True" Text="{Binding personnel.personnel_key, Mode=TwoWay}"/> 
     <PasswordBox HorizontalAlignment="Left" Height="42" Margin="172,96,0,0" VerticalAlignment="Top" Width="274" Name="txtPassword" FontSize="24" Controls:TextBoxHelper.ClearTextButton="True" PasswordChar="*" PasswordChanged="txtPassword_PasswordChanged"/> 
     <Button Content="Ingresar" HorizontalAlignment="Left" IsDefault="True" Margin="172,169,0,-22" VerticalAlignment="Top" Width="274" Height="44" FontSize="24" Name="btnLogin" Style="{StaticResource AccentedSquareButtonStyle}" Command="{Binding btn_login_click}"/> 
    </Grid> 
</Page> 

問:

  • 如何根據當前視圖更改窗口的標題和大小?可能嗎?

回答

0

首先,你必須在MainWindow中聲明綁定,標題等是硬編碼值。

現在我能找到的最簡單的方法是有一個模型,例如

public class ViewPayload{ 
    public string Title{get;set;} 
    //more properties here 
} 

在你的主窗口,然後你想你想改變

public class MainWindow : MetroWindow{ 
public string Title{get;set;} 
// more properties here 
} 

現在繼承人那裏得到什麼性質有趣的是,你可以克里特島酒吧子事件像這樣

private readonly IEventAggregator _eventAggregator = new EventAggregator(); 
_eventAggregator.GetEvent<ViewPayload>().Subscribe(ChangePropertiesFromModel); 

然後當你想pu blishe簡單地做,

_eventAggregator.GetEvent<ViewPayload>().Publish(PublisPayloadMethod()); 

和改變窗口的內容結合,所以

Title="{binding TitleProperty}"