5447


Windows7SP1(32bit), VisualStudio2013ProfessionalでWPFアプリケーションを作成しております。  
対象のフレームワークは.NET Framework 4.5です。

ウインドウ右上の最大化／最小化／元に戻す／閉じる、のコマンドを標準のButtonへ実装したいと思っています。

そこで、以下のように実装しました。

[code]

    <Window x:Class="SystemCommandsSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="target"
        Title="MainWindow" Height="120" Width="185">
    <Grid>
        <StackPanel>
            <Button Content="最小化" Command="{x:Static SystemCommands.MinimizeWindowCommand}" CommandParameter="{Binding ElementName=target}" />
            <Button Content="元に戻す" Command="{x:Static SystemCommands.RestoreWindowCommand}" CommandParameter="{Binding ElementName=target}" />
            <Button Content="最大化" Command="{x:Static SystemCommands.MaximizeWindowCommand}" CommandParameter="{Binding ElementName=target}" />
            <Button Content="閉じる" Command="{x:Static SystemCommands.CloseWindowCommand}" CommandParameter="{Binding ElementName=target}" />
        </StackPanel>
    </Grid>
    
[/code]

上記の実装で良いと思っていたのですが、実行してみると４つのボタンが非活性の状態です。  
ボタンの動作を実現するためのアドバイスを頂けると助かります。

出来ればView側（XAML）のみでこの機能は完結したいと考えています。


CC BY-SA 3.0
2015-01-27T14:58:17.380
5444
2015-01-27T15:32:04.937
2015-01-27T15:04:30.667
3313
7740
question
wpf xaml
SystemCommandsが非活性になる


[英語版StackOverflowの回答](https://stackoverflow.com/questions/13930633/in-wpf-can-
i-have-a-borderless-window-that-has-regular-minimize-maximise-
and-c)を参考にしてみました。  
C#側のコーディングも必要のようです。

[code]

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="120" Width="185">   
        <Window.CommandBindings>
            <CommandBinding Command="{x:Static SystemCommands.MinimizeWindowCommand}" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed_1" />
            <CommandBinding Command="{x:Static SystemCommands.RestoreWindowCommand}" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed_2" />
            <CommandBinding Command="{x:Static SystemCommands.MaximizeWindowCommand}" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed_3" />
            <CommandBinding Command="{x:Static SystemCommands.CloseWindowCommand}" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed_4" />
        </Window.CommandBindings>
    
        <Grid>
            <StackPanel>
                <Button Content="最小化" Command="{x:Static SystemCommands.MinimizeWindowCommand}" CommandParameter="{Binding ElementName=target}" />
                <Button Content="元に戻す" Command="{x:Static SystemCommands.RestoreWindowCommand}" CommandParameter="{Binding ElementName=target}" />
                <Button Content="最大化" Command="{x:Static SystemCommands.MaximizeWindowCommand}" CommandParameter="{Binding ElementName=target}" />
                <Button Content="閉じる" Command="{x:Static SystemCommands.CloseWindowCommand}" CommandParameter="{Binding ElementName=target}" />
            </StackPanel>
        </Grid>
    </Window>
    
[/code]

C#の実装は、

[code]

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }
        private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e)
        {
            SystemCommands.MinimizeWindow(this);
        }
        private void CommandBinding_Executed_2(object sender, ExecutedRoutedEventArgs e)
        {
            SystemCommands.RestoreWindow(this);
        }
        private void CommandBinding_Executed_3(object sender, ExecutedRoutedEventArgs e)
        {
            SystemCommands.MaximizeWindow(this);
        }
        private void CommandBinding_Executed_4(object sender, ExecutedRoutedEventArgs e)
        {
            SystemCommands.CloseWindow(this);
        }
    }
    
[/code]


CC BY-SA 3.0
2015-01-27T15:32:04.937
5447
2015-01-27T15:32:04.937
2017-05-23T12:38:55.250
-1
3925
5444
answer