SQLの窓

2013年09月07日


WPF アプリケーション(VS2010/C#) の Window 間の扱いを知る為のテンプレート

SkyDrive へ移動


テンプレートを 『C:\Users\ユーザID\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C#\Windows』にコピーします。Windows フォルダは C# の中に作成して下さい。



Window と ページ

▼ MyMain ボタンから下のウインドウを開きます ■ 右側の枠は Frame です( Page が表示されます ) ■ Frame 内から MyMain を参照しています
▼ Window2 メニューバーのサンプル付きです( プログラム終了と、ファイルを開くダイアログ ) ■ ダイアログとして呼ばれた時の結果の戻し方 ■ ここからさらに Window を開いて、その中の表示をこちらから変更します
▼ Window3 ■ Navigate Windows です ■ Web ページや Page オブジェクトを表示できます
▼ Window3 ■ Navigate Window に Page を表示したところです
WPF では、Form アプリケーションのように、Owner を取得する事ができないようなので、名前で Windows を参照する為のメソッドを App クラスの static メソッドに作成しています。( 同じ名前の Window を複数作成しないという前提です ) App.xaml.cs
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace WpfForm
{
    public partial class App : Application
    {
        public static Window GetWindow(String name ) {
            Window TargetWindow = null;

            WindowCollection AppWindows = Application.Current.Windows;
            foreach (Window Win in AppWindows)
            {
                if (Win.Name == name)
                {
                    TargetWindow = Win;
                    break;
                }
            }
            return TargetWindow;
        }
    }
}


MainWindow.xaml.cs
namespace WpfForm
{
    public partial class MyMain : Window
    {
        public MyMain()
        {
            InitializeComponent();
            this.frame1.Navigate(new MyPage());
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Window2 normalWindow = new Window2();
            normalWindow.Show();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            Window2 normalWindow = new Window2();
            bool? result = normalWindow.ShowDialog();
            if (!(bool)result)
            {
                MessageBox.Show("キャンセル");
            }
        }
    }
}

Null 許容 bool? 型 が使用されています

Window2.xaml.cs
namespace WpfForm
{
    public partial class Window2 : Window
    {
        private Window3 normalWindow = null;

        public Window2()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            MyMain owner = Application.Current.MainWindow as MyMain;
            Debug.WriteLine(owner.Title);

        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            normalWindow = new Window3();
            normalWindow.Show();

        }

        private void Command_Open_Click(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("メニューがクリックされました");

            // Form 用のクラスの WPF ラッパー
            OpenFileDialog ofg = new OpenFileDialog();
            ofg.Filter = "JPEG|*.jpg*;*.jpg";
            ofg.FilterIndex = 0;
            ofg.FileName = "";

            // Null 許容 bool? 型
            bool? result = ofg.ShowDialog();
            if ((bool)result)
            {
                // パスを表示
                MessageBox.Show(ofg.FileName);
            }

        }

        private void Command_Exit_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("終了しますか?", "終了確認", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                // ダイアログとして呼ばれた時のみ有効
                // ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
                try
                {
                    this.DialogResult = true;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }
                // ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
                // ダイアログとして呼ばれた時のみ有効

                Application.Current.Shutdown();
            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                normalWindow.Close();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                normalWindow.Navigate(new MyPage());
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
    }
}

Frame 内の参照は、WEB ページの IFRAME と同様で以下のようになります
(this.frame1.Content as MyPage).button1.Content.ToString()
【VS(C#)の最新記事】
posted by lightbox at 2013-09-07 23:20 | VS(C#) | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり