내가 보려고 적어놓는 노트
Frame 태그를 사용하여 page전환을 쉽게 할수있다.
<Window x:Class="FrameProject.MainWindow"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FrameProject"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<Button x:Name="xButtonGreen"
Width="150"
Height="50"
Margin="5"
Content="Green" Click="xButtonGreen_Click" />
<Button x:Name="xButtonYellow"
Width="150"
Height="50"
Margin="5"
Content="Yellow" Click="xButtonYellow_Click" />
<Button x:Name="xButtonRed"
Width="150"
Height="50"
Margin="5"
Content="Red" Click="xButtonRed_Click" />
</StackPanel>
<Frame x:Name="xMainFrame"
Grid.Row="1"
NavigationUIVisibility="Hidden" />
</Grid>
</Window>
namespace FrameProject
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
xMainFrame.Navigate(new GreenPage());
}
private void xButtonGreen_Click(object sender, RoutedEventArgs e)
{
xMainFrame.Navigate(new GreenPage());
}
private void xButtonYellow_Click(object sender, RoutedEventArgs e)
{
xMainFrame.Navigate(new YellowPage());
}
private void xButtonRed_Click(object sender, RoutedEventArgs e)
{
xMainFrame.Navigate(new RedPage());
}
}
}
계속 new 키워드를 이용해 page를 변경할때마다 새로운 page가 생성된다면 메모리 낭비가 심해질수있다 . 최적화를 위한 조치를 생각해보자
MainWindow
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Show Log" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="30" Click="ShowLogButton_Click"/>
<Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,40,0,0"/>
</Grid>
</Window>
MainWindow.cs
using System;
using System.Windows;
namespace YourNamespace
{
public partial class MainWindow : Window
{
private Page logPage;
public MainWindow()
{
InitializeComponent();
}
private void ShowLogButton_Click(object sender, RoutedEventArgs e)
{
if (logPage == null)
{
logPage = new 폴더.Log(); // 이미 생성된 인스턴스를 저장
}
MainFrame.Navigate(logPage);
}
}
}