0

我正在使用(我的第一个 WPF 应用程序)创建一个新的 WPF 应用程序:

  • .Net 4.0
  • MVVM 灯
  • C#
  • MahApps 地铁

我已经使用 MVVM Light 中的导航服务实现了导航。我正在使用 MainWindow 和 Pages 来完成相同的操作。

在我的 MainWindow.xaml 中,我有一个 MainFrame 正在更改我当前的视图:

<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>

问题:

  • 如何根据当前视图更改窗口的标题和大小?可能吗?
4

1 回答 1

0

首先,您必须了解绑定的概念,MainWindow 中的标题等是硬编码的值。

现在我能找到的最简单的方法是有一个模型,例如

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

然后在您的 MainWindow 上,您需要要更改的属性

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

现在这里很有趣,你可以像这样创建一个酒吧子活动

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

然后,当您想发布时,只需执行此操作,

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

并将窗口内容更改为绑定,所以

Title="{binding TitleProperty}"
于 2016-11-18T17:57:25.397 回答