Understanding WPF Layout Panels: Easy Examples of Grid, StackPanel, WrapPanel, DockPanel, Canvas & UniformGrid

If you are just starting out with WPF , layouts are something you must understand very clearly, because they control how every control such as button, textbox, etc. appears on the screen. ⭐ What Are Layout Panels? Think of layout panels like containers or boxes that help you arrange your UI elements . Just like when you pack a suitcase, you organize things in different sections — WPF uses layout panels to organize controls properly. They decide: where controls appear, how they resize, how they adapt when the window grows or shrinks. 📌 Let’s Learn Panels One by One (with real examples) 🟦 1. StackPanel — arrange controls in a line StackPanel arranges items one after another, either top to bottom or left to right. Let me show you a simple example. ✔ Example: Vertical StackPanel <StackPanel Orientation="Vertical">     <Button Content="Save" Width="100"/>     <Button Content="Edit" Width="100"/>     <Button Conte...

Print preview with Print in wpf using MVVM, Prism


 MainWindow.xaml

 <Window x:Class="WpfDemo.Views.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:WpfDemo"
             mc:Ignorable="d" Title="MainWindow">
     <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
         <TextBlock Text="This is Print Preview demo"/>
         <Button Content="Open file dialog" Command="{Binding ClickCommand}"  Margin="10" Width="100"/>
       </StackPanel>
 </Window>

 MainWindow.xaml.cs

  public partial class MainWindow : Window
     {

         public MainWindow()
         {
             InitializeComponent();
             DataContext = new MainWindowViewModel();
         }

     }

 MainWindowViewModel.cs

  public class MainWindowViewModel : BindableBase
     {

         public MainWindowViewModel()
         {


         }

         DelegateCommand _clickCommand;
         public DelegateCommand ClickCommand
         {
             get
             {
                 return _clickCommand = _clickCommand ?? new DelegateCommand(PrintPreview);
             }

         }

         public void PrintPreview()
         {
             using (MemoryStream xpsStream = new MemoryStream())
             {
                 using (Package package = Package.Open(xpsStream, FileMode.Create, FileAccess.ReadWrite))
                 {
                     var packageUriString = Environment.GetEnvironmentVariable("temp") + @"\data.xps";
                     Uri packageUri = new Uri(packageUriString);
                     PackageStore.AddPackage(packageUri, package);

                     XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.Maximum, packageUriString);
                     XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);


                     PrintTicket printTicket = new PrintTicket();
                     var viewToPrint = Application.Current.MainWindow;
//here you can use your view which you want to print. i am trying to print Mainwindow. 

                     writer.Write(viewToPrint, printTicket);

                     FixedDocumentSequence document = xpsDocument.GetFixedDocumentSequence();

                     xpsDocument.Close();

                     PrintPreviewDialog printPreviewWnd = new PrintPreviewDialog(document);
                     printPreviewWnd.ShowDialog();
                     PackageStore.RemovePackage(packageUri);

                 }

             }
         }
     }

 PrintPreviewDialog.xaml

 <Window x:Class="WpfDemo.Views.PrintPreviewDialog"
         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:WpfDemo"
         mc:Ignorable="d"
         Title="Print Preview">
     <DocumentViewer Document="{Binding}"/>
 </Window>

 PrintPreviewDialog.xaml.cs

   public partial class PrintPreviewDialog : Window
     {
         public PrintPreviewDialog(IDocumentPaginatorSource document)
         {
             InitializeComponent();
             DataContext = document;
         }
     }

Comments

Popular posts from this blog

Filter DataGrid and ListView in wpf using ICollectionView

Pagination of DataGrid in WPF using MVVM

How to Create TabControl using Prism Region