Programmatically change the Stretch and StretchDirection of content within a Viewbox.

image_pdfimage_print


   
  


<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="Viewbox_Stretch_Layout_Samp.Window1"
    Title="ViewBox Stretch and StretchDirection Sample">

  <DockPanel Background="White">
        <StackPanel HorizontalAlignment="Center" Orientation="Horizontal" DockPanel.Dock="Top">
            <Button Name="btn1" Click="stretchNone">Stretch="None"</Button>
            <Button Name="btn2" Click="stretchFill">Stretch="Fill"</Button>
            <Button Name="btn3" Click="stretchUni">Stretch="Uniform"</Button>
            <Button Name="btn4" Click="stretchUniFill">Stretch="UniformToFill"</Button>
            <Button Name="btn5" Click="sdUpOnly">StretchDirection="UpOnly"</Button>
            <Button Name="btn6" Click="sdDownOnly">StretchDirection="DownOnly"</Button>
            <Button Name="btn7" Click="sdBoth">StretchDirection="Both"</Button>
         </StackPanel>        
        
        <TextBlock DockPanel.Dock="Top" Name="txt1" />
        <TextBlock DockPanel.Dock="Top" Name="txt2" />
        
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Viewbox MaxWidth="500" MaxHeight="500" Name="vb1">
                <Image Source="c:image.jpg"/>
            </Viewbox>    
        </StackPanel>
  </DockPanel>
</Window>

//File:Window.xaml.cs

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace Viewbox_Stretch_Layout_Samp
{
  public partial class Window1 : Window
  {
        public void stretchNone(object sender, RoutedEventArgs e)
        {
            vb1.Stretch = System.Windows.Media.Stretch.None;
            txt1.Text = "Stretch is now set to None.";
        }

        public void stretchFill(object sender, RoutedEventArgs e)
        {
            vb1.Stretch = System.Windows.Media.Stretch.Fill;
            txt1.Text = "Stretch is now set to Fill.";
        }

        public void stretchUni(object sender, RoutedEventArgs e)
        {
            vb1.Stretch = System.Windows.Media.Stretch.Uniform;
            txt1.Text = "Stretch is now set to Uniform.";
        }

        public void stretchUniFill(object sender, RoutedEventArgs e)
        {
            vb1.Stretch = System.Windows.Media.Stretch.UniformToFill;
            txt1.Text = "Stretch is now set to UniformToFill.";
        }

        public void sdUpOnly(object sender, RoutedEventArgs e)
        {
            vb1.StretchDirection = System.Windows.Controls.StretchDirection.UpOnly;
            txt2.Text = "StretchDirection is now UpOnly.";
        }

        public void sdDownOnly(object sender, RoutedEventArgs e)
        {
            vb1.StretchDirection = System.Windows.Controls.StretchDirection.DownOnly;
            txt2.Text = "StretchDirection is now DownOnly.";
        }

        public void sdBoth(object sender, RoutedEventArgs e)
        {
            vb1.StretchDirection = System.Windows.Controls.StretchDirection.Both;
            txt2.Text = "StretchDirection is now Both.";
        }
    }
}