//mainwindow.xaml
<Window x:Class="WpfApp23.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:WpfApp23"
mc:Ignorable="d"
WindowStyle="None"
WindowState="Maximized"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="Button">
<Setter Property="FontSize" Value="30"/>
</Style>
</Window.Resources>
<Window.Background>
<ImageBrush ImageSource="../Images/10.jpg"/>
</Window.Background>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<WrapPanel Grid.Column="0" Orientation="Vertical">
<Button Content="Main" Command="{Binding NavigateCommand}" CommandParameter="0"/>
<Button Content="1" Command="{Binding NavigateCommand}" CommandParameter="1"/>
<Button Content="2" Command="{Binding NavigateCommand}" CommandParameter="2"/>
<Button Content="3" Command="{Binding NavigateCommand}" CommandParameter="3"/>
<Button Content="4" Command="{Binding NavigateCommand}" CommandParameter="4"/>
<Button Content="5" Command="{Binding NavigateCommand}" CommandParameter="5"/>
<Button Content="6" Command="{Binding NavigateCommand}" CommandParameter="6"/>
<Button Content="7" Command="{Binding NavigateCommand}" CommandParameter="7"/>
<Button Content="8" Command="{Binding NavigateCommand}" CommandParameter="8"/>
<Button Content="9" Command="{Binding NavigateCommand}" CommandParameter="9"/>
</WrapPanel>
<Frame x:Name="mainFrame" Grid.Column="1" NavigationUIVisibility="Hidden"
JournalOwnership="OwnsJournal"/>
</Grid>
</Window>
//cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfApp23.SubViews;
namespace WpfApp23
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var mainPageView = new MainPage();
mainFrame.Navigate(mainPageView);
this.DataContext= MainVM.mainVM;
MainVM.mainVM.mainFrame=mainFrame;
}
}
public class MainVM : INotifyPropertyChanged
{
public Frame mainFrame;
List<UserControl> subViews;
public static MainVM mainVM { get; set; }
static MainVM()
{
mainVM=new MainVM();
}
public MainVM()
{
InitSubViews();
}
private void InitSubViews()
{
subViews=new List<UserControl>();
subViews.Add(new MainPage());
subViews.Add(new SubView1());
subViews.Add(new SubView2());
subViews.Add(new SubView3());
subViews.Add(new SubView4());
subViews.Add(new SubView5());
subViews.Add(new SubView6());
subViews.Add(new SubView7());
subViews.Add(new SubView8());
subViews.Add(new SubView9());
}
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propName = "")
{
var handler = PropertyChanged;
if (handler!=null)
{
handler?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
private DelCommand navigateCommand;
public DelCommand NavigateCommand
{
get
{
if (navigateCommand==null)
{
navigateCommand=new DelCommand(NavigateCommandExecuted);
}
return navigateCommand;
}
}
private void NavigateCommandExecuted(object? obj)
{
int idx = 0;
if(Int32.TryParse(obj?.ToString(), out idx))
{
mainFrame.Navigate(subViews[idx]);
}
}
}
public class DelCommand : ICommand
{
private Action<object?> execute;
private Predicate<object?> canExecute;
public DelCommand(Action<object?> executeValue, Predicate<object?> canExecuteValue = null)
{
execute=executeValue;
canExecute=canExecuteValue;
}
public event EventHandler? CanExecuteChanged
{
add
{
CommandManager.RequerySuggested+=value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
public bool CanExecute(object? parameter)
{
return canExecute==null ? true : canExecute(parameter);
}
public void Execute(object? parameter)
{
execute(parameter);
}
}
}
//mainpage.xaml
<UserControl x:Class="WpfApp23.MainPage"
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:local="clr-namespace:WpfApp23"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="Button">
<Setter Property="FontSize" Value="100"/>
<Setter Property="Margin" Value="20,20,20,20"/>
</Style>
<Style x:Key="ImageButtonStyle" TargetType="Button">
<!--<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/YourApp;component/Images/button-bg.png"/>
</Setter.Value>
</Setter>-->
<Setter Property="FontSize" Value="100"/>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Margin" Value="20,20,20,20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Border x:Name="mainBorder" Background="{TemplateBinding Background}"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Border x:Name="hoverOverlay" Background="#20FFFFFF" Opacity="0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="hoverOverlay" Property="Opacity" Value="1"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="mainBorder" Property="Opacity" Value="0.9"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontSize" Value="200"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.Background>
<ImageBrush ImageSource="../Images/10.jpg"/>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Content="1" Command="{Binding NavigateCommand}" CommandParameter="1"
Grid.Row="0" Grid.Column="0" Click="Button_Click" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/1.jpg"/>
</Button.Background>
</Button>
<Button Content="2" Command="{Binding NavigateCommand}" CommandParameter="2"
Grid.Row="0" Grid.Column="1" Click="Button_Click" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/2.jpg"/>
</Button.Background>
</Button>
<Button Content="3" Command="{Binding NavigateCommand}" CommandParameter="3"
Grid.Row="0" Grid.Column="2" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/3.jpg"/>
</Button.Background>
</Button>
<Button Content="4" Command="{Binding NavigateCommand}" CommandParameter="4"
Grid.Row="1" Grid.Column="0" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/4.jpg"/>
</Button.Background>
</Button>
<Button Content="5" Command="{Binding NavigateCommand}" CommandParameter="5"
Grid.Row="1" Grid.Column="1" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/5.jpg"/>
</Button.Background>
</Button>
<Button Content="6" Command="{Binding NavigateCommand}" CommandParameter="6"
Grid.Row="1" Grid.Column="2" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/6.jpg"/>
</Button.Background>
</Button>
<Button Content="7" Command="{Binding NavigateCommand}" CommandParameter="7"
Grid.Row="2" Grid.Column="0" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/7.jpg"/>
</Button.Background>
</Button>
<Button Content="8" Command="{Binding NavigateCommand}" CommandParameter="8"
Grid.Row="2" Grid.Column="1" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/8.jpg"/>
</Button.Background>
</Button>
<Button Content="9" Command="{Binding NavigateCommand}" CommandParameter="9"
Grid.Row="2" Grid.Column="2" Style="{StaticResource ImageButtonStyle}">
<Button.Background>
<ImageBrush ImageSource="../Images/9.jpg"/>
</Button.Background>
</Button>
</Grid>
</UserControl>
//mainpage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp23
{
/// <summary>
/// Interaction logic for MainPage.xaml
/// </summary>
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.DataContext= MainVM.mainVM;
this.DataContextChanged+=MainPage_DataContextChanged;
}
private void MainPage_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.DataContext= MainVM.mainVM;
}
}
}
//Subview1.xaml
<UserControl x:Class="WpfApp23.SubViews.SubView1"
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:local="clr-namespace:WpfApp23.SubViews"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.Background>
<ImageBrush ImageSource="../Images/1.jpg"/>
</Grid.Background>
<TextBlock Text="1" FontSize="200" Foreground="Red" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</UserControl>
//Subview1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp23.SubViews
{
/// <summary>
/// Interaction logic for SubView1.xaml
/// </summary>
public partial class SubView1 : UserControl
{
public SubView1()
{
InitializeComponent();
}
}
}
![image]()
![image]()
![image]()
![image]()
![image]()