Declarative Playback

image_pdfimage_print


   
      

<Window x:Class="SoundAndVideo.DeclarativePlayback"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DeclarativePlayback" Height="300" Width="300">
  <Window.Resources>
      <Storyboard x:Key="MediaStoryboardResource" SlipBehavior="Slip">
      <MediaTimeline Storyboard.TargetName="media" Source="c:song.mp3" FillBehavior="HoldEnd"></MediaTimeline>
      </Storyboard>
  </Window.Resources>
  
    <Grid Margin="5">
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        
      </Grid.RowDefinitions>
        <Grid.Triggers>          
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdPlay">
              <EventTrigger.Actions>
                <BeginStoryboard Name="MediaStoryboard" Storyboard="{StaticResource MediaStoryboardResource}"/>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdStop">
              <EventTrigger.Actions>
                <StopStoryboard BeginStoryboardName="MediaStoryboard"/>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdPause">
              <EventTrigger.Actions>
                <PauseStoryboard BeginStoryboardName="MediaStoryboard"/>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdResume">
              <EventTrigger.Actions>
                <ResumeStoryboard BeginStoryboardName="MediaStoryboard"/>
              </EventTrigger.Actions>
            </EventTrigger>          
        </Grid.Triggers>

      <MediaElement Name="media"></MediaElement>
      <StackPanel Orientation="Horizontal">
        <Button Name="cmdPlay" Padding="5" Margin="1">Play</Button>
        <Button Name="cmdStop" Padding="5" Margin="1">Stop</Button>
        <Button Name="cmdPause" Padding="5" Margin="1">Pause</Button>
        <Button Name="cmdResume" Padding="5" Margin="1">Resume</Button>
        </StackPanel>

      <Grid Margin="0,10,0,0" Grid.Row="2">
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"></ColumnDefinition>
          <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock Margin="5">Volume: </TextBlock>
        <Slider Grid.Column="1" Minimum="0" Maximum="1"
              Value="{Binding ElementName=media, Path=Volume, Mode=TwoWay}"></Slider>
        <TextBlock Margin="5" Grid.Row="1">Balance: </TextBlock>
      <Slider Grid.Row="1" Grid.Column="1" Minimum="-1" Maximum="1"
        Value="{Binding ElementName=media, Path=Balance, Mode=TwoWay}"></Slider>
      </Grid>
    </Grid>
  
</Window>

   
    
    
    
    
    
     


Play a Media File

image_pdfimage_print


   
  
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF" Height="450" Width="300">
    <StackPanel x:Name="Panel">
        <StackPanel.Triggers>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnPlay">
                <EventTrigger.Actions>
                    <BeginStoryboard Name="ClockStoryboard">
                        <Storyboard x:Name="Storyboard"  SlipBehavior="Slip"
                                    CurrentTimeInvalidated="Storyboard_Changed">
                            <MediaTimeline BeginTime="0" Source="c:a.avi" 
                                 Storyboard.TargetName="meMediaElement"
                                 RepeatBehavior="Forever" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnPause">
                <EventTrigger.Actions>
                    <PauseStoryboard BeginStoryboardName="ClockStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnResume">
                <EventTrigger.Actions>
                    <ResumeStoryboard BeginStoryboardName="ClockStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnStop">
                <EventTrigger.Actions>
                    <StopStoryboard BeginStoryboardName="ClockStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Slider.PreviewMouseLeftButtonDown" 
                              SourceName="sldPosition" >
                <PauseStoryboard BeginStoryboardName="ClockStoryboard" />
            </EventTrigger>
            <EventTrigger RoutedEvent="Slider.PreviewMouseLeftButtonUp" 
                              SourceName="sldPosition" >
                <ResumeStoryboard BeginStoryboardName="ClockStoryboard" />
            </EventTrigger>
        </StackPanel.Triggers>

        <MediaElement Name="meMediaElement" HorizontalAlignment="Center"
                      Margin="5" MinHeight="300" Stretch="Fill"
                      MediaOpened="MediaOpened" />
        <Button Content="_Play" Name="btnPlay" />
        <Button Content="P_ause" Name="btnPause" />
        <Button Content="_Resume" Name="btnResume" />
        <Button Content="_Stop" Name="btnStop" />
        <Slider HorizontalAlignment="Center" Margin="5" 
                Name="sldPosition" Width="250"
                ValueChanged="sldPosition_ValueChanged">
        </Slider>
        <TextBlock Text="Volume:"/>
        <Slider Minimum="0" Maximum="1" TickFrequency="0.1" TickPlacement="TopLeft" Value="{Binding ElementName=meMediaElement, Path=Volume, Mode=TwoWay}" />
        <TextBlock Text="Balance:"/>
        <Slider Minimum="-1" Maximum="1" TickFrequency="0.2" TickPlacement="TopLeft" Value="{Binding ElementName=meMediaElement, Path=Balance, Mode=TwoWay}" />
    </StackPanel>
</Window>
//File:Window.xaml.cs

using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        bool ignoreValueChanged = false;

        public Window1()
        {
            InitializeComponent();
        }
        private void MediaOpened(object sender, EventArgs e)
        {
            sldPosition.Maximum = meMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds;
        }
        private void Storyboard_Changed(object sender, EventArgs e)
        {
            ClockGroup clockGroup = sender as ClockGroup;
            MediaClock mediaClock = clockGroup.Children[0] as MediaClock;
            if (mediaClock.CurrentProgress.HasValue){
                ignoreValueChanged = true;
                sldPosition.Value = meMediaElement.Position.TotalMilliseconds;
                ignoreValueChanged = false;
            }
        }
        private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e){
            if (ignoreValueChanged)
            {
                return;
            }
            Storyboard.Seek(Panel,TimeSpan.FromMilliseconds(sldPosition.Value),TimeSeekOrigin.BeginTime);
        }
    }
}

   
    
     


Set margins, by changing any existing property value for the margin in code-behind with Thickness class

image_pdfimage_print


   
  

<StackPanel Name="root"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="WpfApplication1.FEMarginProgrammatic">
  <StackPanel.Resources>
      <Style TargetType="Button">
        <Setter Property="Height" Value="25"/>
        <Setter Property="Width" Value="250"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
        <Setter Property="FontSize" Value="20"/>    
      </Style>
  </StackPanel.Resources>
  <Button Click="OnClick" Margin="10" Name="btn1">Click To See Change!!</Button>
</StackPanel>

//File:Window.xaml.cs

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace WpfApplication1
{
    public partial class FEMarginProgrammatic {
        void OnClick(object sender, RoutedEventArgs e)
        {
            Thickness marginThickness = btn1.Margin;
            if(marginThickness.Left == 10)
            {
                 btn1.Margin = new Thickness(60);
            } else {
                 btn1.Margin = new Thickness(10);
            }
        }
    }
}

   
    
     


Change the margins of an element that is within a Grid by XAML and programmatic code

image_pdfimage_print


   
  

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="WpfApplication1.Window1"
    Title="Dynamically Change Margin Property Sample">
  <DockPanel Background="White">

    <TextBlock DockPanel.Dock="Top" FontSize="24" FontWeight="Bold">Grid Margin Property Sample</TextBlock>
        <Border Border.Background="LightSteelBlue" Border.BorderThickness="2" Border.BorderBrush="Black" DockPanel.Dock="Top">
            <Grid Name="grid1" Height="400">
              <Grid.ColumnDefinitions>
                <ColumnDefinition/>
              </Grid.ColumnDefinitions>
              <Grid.RowDefinitions>
                <RowDefinition/>
              </Grid.RowDefinitions>
                <TextBlock Name="text1" HorizontalAlignment="Center" Grid.Column="0" Grid.Row="0">Some Text.</TextBlock>
          </Grid>
        </Border>
        <Grid HorizontalAlignment="Center" Width="300" DockPanel.Dock="Top">
        <Grid.RowDefinitions>
          <RowDefinition/>
          <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"/>
          <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
              <ListBox Grid.Row="0" Grid.Column="1" Width="50" Height="50" VerticalAlignment="Top" SelectionChanged="ChangeMargin">
                  <ListBoxItem>10</ListBoxItem>
                  <ListBoxItem>20</ListBoxItem>
                  <ListBoxItem>30</ListBoxItem>
                  <ListBoxItem>40</ListBoxItem>
                  <ListBoxItem>50</ListBoxItem>
                  <ListBoxItem>60</ListBoxItem>
                  <ListBoxItem>70</ListBoxItem>
                  <ListBoxItem>80</ListBoxItem>
                  <ListBoxItem>90</ListBoxItem>
                  <ListBoxItem>100</ListBoxItem>
              </ListBox>
          </Grid>
      </DockPanel>        
</Window>
//File:Window.xaml.cs


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


namespace WpfApplication1
{
  public partial class Window1 : Window
  {
    public void ChangeMargin(object sender, SelectionChangedEventArgs args)
    {
      ListBoxItem li = ((sender as ListBox).SelectedItem as ListBoxItem);
            ThicknessConverter myThicknessConverter = new ThicknessConverter();
            Thickness th1 = (Thickness)myThicknessConverter.ConvertFromString(li.Content.ToString());
            text1.Margin = th1;
            String st1 = (String)myThicknessConverter.ConvertToString(text1.Margin);
            Console.WriteLine("Margin: " + st1);
    }
  }
}

   
    
     


Matrix3D scale transformation

image_pdfimage_print


   
  

<Window x:Class="WpfApplication1.Matrix3DTransforms"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Matrix3D Transformations" Height="450" Width="300">
  <StackPanel>
    <TextBlock Margin="10,10,5,5" Text="Original Matrix:" />
    <TextBlock Name="tbOriginal" Margin="20,0,5,5" />
    <TextBlock Margin="10,0,5,5" Text="Scale:" />
    <TextBlock Name="tbResult" Margin="20,0,5,5" />

  </StackPanel>
</Window>

//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;

namespace WpfApplication1
{
    public partial class Matrix3DTransforms : Window
    {
        public Matrix3DTransforms()
        {
            InitializeComponent();
            Matrix3D M = new Matrix3D(1, 2, 3, 4,
                                      2, 1, 0, 0,
                                      0, 0, 1, 0,
                                      1, 2, 3, 1);


            Matrix3D M1 = M;
            tbOriginal.Text = "(" + M.ToString() + ")";

            //Scale: 
            M.Scale(new Vector3D(0.5, 1.5, 2.5));
            tbResult.Text = "(" + M.ToString() + ")";

        }
    }
}

   
    
     


Matrix3D ScalePrepend

image_pdfimage_print


   
  

<Window x:Class="WpfApplication1.Matrix3DTransforms"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Matrix3D Transformations" Height="450" Width="300">
  <StackPanel>
    <TextBlock Margin="10,10,5,5" Text="Original Matrix:" />
    <TextBlock Name="tbOriginal" Margin="20,0,5,5" />
    <TextBlock Margin="10,0,5,5" Text="Scale:" />
    <TextBlock Name="tbResult" Margin="20,0,5,5" />

  </StackPanel>
</Window>

//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;

namespace WpfApplication1
{
    public partial class Matrix3DTransforms : Window
    {
        public Matrix3DTransforms()
        {
            InitializeComponent();
            Matrix3D M = new Matrix3D(1, 2, 3, 4,
                                      2, 1, 0, 0,
                                      0, 0, 1, 0,
                                      1, 2, 3, 1);


            Matrix3D M1 = M;
            tbOriginal.Text = "(" + M.ToString() + ")";

            M = M1; // Reset M to the original matrix. 
            M.ScalePrepend(new Vector3D(0.5, 1.5, 2.5));
            tbResult.Text = "(" + M.ToString() + ")";

        }
    }
}

   
    
     


Matrix3D Translation

image_pdfimage_print


   
  

<Window x:Class="WpfApplication1.Matrix3DTransforms"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Matrix3D Transformations" Height="450" Width="300">
  <StackPanel>
    <TextBlock Margin="10,10,5,5" Text="Original Matrix:" />
    <TextBlock Name="tbOriginal" Margin="20,0,5,5" />
    <TextBlock Margin="10,0,5,5" Text="Scale:" />
    <TextBlock Name="tbResult" Margin="20,0,5,5" />

  </StackPanel>
</Window>

//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;

namespace WpfApplication1
{
    public partial class Matrix3DTransforms : Window
    {
        public Matrix3DTransforms()
        {
            InitializeComponent();
            Matrix3D M = new Matrix3D(1, 2, 3, 4,
                                      2, 1, 0, 0,
                                      0, 0, 1, 0,
                                      1, 2, 3, 1);


            tbOriginal.Text = "(" + M.ToString() + ")";

            //Translation: 
            M.Translate(new Vector3D(100, 150, 200));
            tbResult.Text = "(" + M.ToString() + ")";

        }
    }
}