<Window
x:Class="RoutedCommandBindingSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Simple Media Player" Height="350" Width="525"
Icon="pack://application:,,,/Resources/Sound.ico"
xmlns:local="clr-namespace:RoutedCommandBindingSample"
xmlns:cmd="clr-namespace:RoutedCommandBindingSample.Commands">
<Window.Resources>
<Style x:Key="MediaButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Margin" Value="2"/>
<Setter Property="Width" Value="35"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".5"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="MediaToolbarButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource MediaButtonStyle}">
<Setter Property="Margin" Value="0"/>
<Setter Property="Width" Value="24"/>
</Style>
</Window.Resources>
<Window.CommandBindings>
<cmd:DataContextCommandBinding Command="MediaCommands.Play" Executed="Play" CanExecute="CanPlay" />
<cmd:DataContextCommandBinding Command="MediaCommands.Stop" Executed="Stop" CanExecute="CanStop" />
<cmd:DataContextCommandBinding Command="local:MyMediaCommands.Pause" Executed="Pause" CanExecute="CanPause" />
</Window.CommandBindings>
<DockPanel LastChildFill="True">
<Menu DockPanel.Dock="Top">
<MenuItem Header="Playback Menu">
<MenuItem Header="Play" Command="MediaCommands.Play" />
<MenuItem Header="Stop" Command="MediaCommands.Stop" />
<MenuItem Header="Pause" Command="local:MyMediaCommands.Pause" />
</MenuItem>
</Menu>
<ToolBar DockPanel.Dock="Top" Height="28">
<Button Command="MediaCommands.Play" Style="{StaticResource MediaToolbarButtonStyle}">
<Image Source="pack://application:,,,/Resources/Play.png"/>
</Button>
<Button Command="MediaCommands.Stop" Style="{StaticResource MediaToolbarButtonStyle}">
<Image Source="pack://application:,,,/Resources/Stop.png"/>
</Button>
<Button Command="local:MyMediaCommands.Pause" Style="{StaticResource MediaToolbarButtonStyle}">
<Image Source="pack://application:,,,/Resources/Pause.png"/>
</Button>
</ToolBar>
<DockPanel DockPanel.Dock="Top" Margin="10" LastChildFill="True">
<Label Content="Uri:" DockPanel.Dock="Left"/>
<TextBox Text="{Binding SourceUri, UpdateSourceTrigger=PropertyChanged}" />
</DockPanel>
<DockPanel DockPanel.Dock="Top" Margin="10" LastChildFill="True">
<Label Content="Volume:" DockPanel.Dock="Left"/>
<Slider Value="{Binding Volume}" Minimum="0" Maximum="1" SmallChange=".01" LargeChange=".05" TickPlacement="BottomRight" TickFrequency=".05" />
</DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="10" Height="25">
<Label Content="Via DataContextCommandBindings:" />
<Button Command="MediaCommands.Play" Style="{StaticResource MediaButtonStyle}">
<Image Source="pack://application:,,,/Resources/Play.png"/>
</Button>
<Button Command="MediaCommands.Stop" Style="{StaticResource MediaButtonStyle}">
<Image Source="pack://application:,,,/Resources/Stop.png"/>
</Button>
<Button Command="local:MyMediaCommands.Pause" Style="{StaticResource MediaButtonStyle}">
<Image Source="pack://application:,,,/Resources/Pause.png"/>
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="10" Height="25">
<Label Content="Via DataContextCommandAdapter:" />
<Button Command="{cmd:DataContextCommandAdapter Play, CanPlay}" Style="{StaticResource MediaButtonStyle}">
<Image Source="pack://application:,,,/Resources/Play.png"/>
</Button>
<Button Command="{cmd:DataContextCommandAdapter Stop, CanStop}" Style="{StaticResource MediaButtonStyle}">
<Image Source="pack://application:,,,/Resources/Stop.png"/>
</Button>
<Button Command="{cmd:DataContextCommandAdapter Pause, CanPause}" Style="{StaticResource MediaButtonStyle}">
<Image Source="pack://application:,,,/Resources/Pause.png"/>
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="10" Height="25">
<Label Content="Via DataContextCommandAdapter on InputBindings:" />
<Button Style="{StaticResource MediaButtonStyle}">
<Button.InputBindings>
<MouseBinding Command="{cmd:DataContextCommandAdapter Play, CanPlay}" MouseAction="LeftClick"/>
</Button.InputBindings>
<Image Source="pack://application:,,,/Resources/Play.png"/>
</Button>
<Button Style="{StaticResource MediaButtonStyle}">
<Button.InputBindings>
<MouseBinding Command="{cmd:DataContextCommandAdapter Stop, CanStop}" MouseAction="LeftClick"/>
</Button.InputBindings>
<Image Source="pack://application:,,,/Resources/Stop.png"/>
</Button>
<Button Style="{StaticResource MediaButtonStyle}">
<Button.InputBindings>
<MouseBinding Command="{cmd:DataContextCommandAdapter Pause, CanPause}" MouseAction="LeftClick"/>
</Button.InputBindings>
<Image Source="pack://application:,,,/Resources/Pause.png"/>
</Button>
</StackPanel>
<Label Content="Media Messages" DockPanel.Dock="Top" />
<ListView ItemsSource="{Binding Messages}" />
</DockPanel>
</Window>