2016-11-18 64 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}"