WPFのコントロールは、見た目を完全にカスタマイズする方法が提供されています。コントロールは、TemplateというプロパティにControlTemplateを設定することで、見た目を100%カスタマイズすることが出来るようになっています。 コントロールのTemplateの差し替え例を示します。WPFのLabelコントロールには、Windows Formと異なりClickイベントが提供されていません。ここではClick可能なLabelの実現のために、Buttonコントロールの見た目をLabelにします。 <Button Content="ラベル" Click="Button_Click"> <Button.Template> <ControlTemplate TargetType="{x:Type Button}"> <Label Content="{TemplateBinding Con
2016/05/14: ContentTemplateを使用した場合とContentとして直接記述した場合のDataContextの違いを追記 この記事では「コントロールとは何か」「データとは何か」については一切触れません。 代わりにVisual Treeに基づいて記述します。この記事で「子要素」などと記述しているものは、Logical TreeでなくVisual Treeでの話です。 この記事で言及する内容を最初に書いておきます: ControlTemplate 適用対象Controlの子要素を指定するもの DataTemplate ControlTemplate中のContentPresenterの、子要素を指定するもの 具体例 それぞれのxamlコードの下に、Visual Treeの内容を載せています。 Visual Treeを確認するには、 WPF Inspector を使う方法や
#WPFでMVVMは難しい 残念なことに、WPFでMVVMパターンを適用する際には、.NET標準だけ使うとなると、綺麗でわかりやすく保守が容易なコードが書けません。 書けないような基盤しかないのです。 なので、PrismなどのMVVM基盤ライブラリが必要となります。 https://msdn.microsoft.com/ja-jp/library/gg406140.aspx 他にも様々なライブラリが公開されていますが、MS謹製ということで今回はPrismを利用しようと思います。 Prismを利用することで得られるメリットを公開します。 以下の予定です。 BindableBase/DelegateCommand ~ViewModelの基盤~ ErrorsContaier ~便利なエラー通知~ ViewModelLocationProvider ~ViewとViewModelを自動で関連付け~
C# Advent Calendar 2016の記事です。 はじめに Windowsで動くデスクトップアプリを作るとしたらWPFが最強だと思うのですが、だけどあのWPFの素のコントロールはダサい!! デザイナーじゃなくても簡単にモダンなUIを作る方法はないものかと探していたところ、MaterialDesignInXamlToolkitというよさげなデザインライブラリを知ったので紹介します。 Material Design In XAML Toolkitとは MaterialDesignInXamlToolkitとはWPFアプリにマテリアルデザインを簡単に適用できるオープンソースのデザインライブラリです。 Githubで公開しておりMITライセンスです。 https://github.com/ButchersBoy/MaterialDesignInXamlToolkit 試したことはないです
はじめに WPFのコントロール(TextBoxなど)にフォーカスが当たっている状態から、フォーカスを外す方法に、一瞬悩んだのでメモ&情報共有のため寄稿します。 やりかた MSDN該当箇所 https://msdn.microsoft.com/ja-jp/library/system.windows.input.keyboard.clearfocus(v=vs.110).aspx 以上! 経緯 WPFアプリ作成中にバックグラウンドで特定処理を実施し、完了後、画面を更新するという振る舞いを作っていた際に、TextBoxとかにフォーカスが当たった状態だと結果が更新されなくなる事象が発生しました。 根本的な原因は別にあると思うのですが、恒久対策を行うまでの間、ひとまずはフォーカスを外してから処理するよう暫定対策をおうとしたのですが。。。 TextBoxのFocusメソッドが、IInputEleme
これは、XAML Advent Calendar 2013 の 1 日目のエントリーです。 WPF (または Windows ストア アプリ) におけるコレクション コントロール (ItemsControl) の外観をカスタマイズするための基礎として、4 つのプロパティの使いどころを紹介します。 前置き WPF でアプリ開発をしていると、そのデザイン性の高さを生かし、WPF っぽい (?) UI のアプリを開発したくなりませんか? なりますよね! 既定のデザインで開発しても、データ バインディング等々の恩恵を多分に受けられるので十分素晴らしいのですが、「その UI だったら WindowsForms で作れるじゃん」なんて思ってしまったり。 なので、私が WPF アプリを開発するときは、最近の Visual Studio や Zune、GitHub for Windows などに見られるモ
この記事はXAMLアドベントカレンダー2014 8日目の記事です。 前置き 先日のConnect();では、久しぶりにWPFの今後のロードマップの話がありましたねw WPFの次バージョンが気になる今日この頃ですが、今日は現時点での最新版WPF4.5で追加されていた新機能についてのお話をしたいと思います。 WPF4.5の新機能 WPF4.5で追加された新機能、ちゃんと使ってみると、地味に便利な機能が多々あるのです。 新機能一覧は以下のページにまとまっています。 WPF Version 4.5 の新機能 サンプルコードもないし、説明も微妙にわかりにくいので、ちょっと残念な感じですが。。。 この記事で作る物 この記事では、WPF4.5の新機能の一番最後に書かれている、「イベントのマークアップ拡張」についてご紹介します。 イベントのマークアップ拡張を用いると、「イベント発生時にVMのコマンド呼び出
こんな風に、LightBox的なダイアログ表示を行うライブラリを作ってみました。 概要 WPFでLightBox的なダイアログ表示を行うライブラリです。 ダイアログは、別ウィンドウではなく、呼び出し元ウィンドウ上にAdornerとして重ねて表示します。 コードビハインドからMessageBoxを呼ぶのと同じ感覚で、イイ感じのLightBox表示ができます。 LightBox.Show(this, new SampleDialog()); ざっくり特徴をまとめると以下のような感じ。 WindowのXAMLコードには手をいれずに、元のウィンドウ上にLightBoxを重ねて表示できる。 LightboxはAdornerとして表示するので、呼び出し元のXAMLにLightBox領域用のプレースホルダみたいなコントロールを配置しておく必要はありません。 モーダル/モードレスどちらの表示にも対応 Sh
WPFは、イベントも独自の機構を構築しています。WPFのイベントシステムの特徴を説明する前に、なぜその仕組みが必要になるかというシンプルな例を示したいと思います。以下のようにButtonの中にButtonがあるシンプルなケースでのイベントについて考えてみます。 <StackPanel Margin="10"> <Button Click="Button_Click"> <Button Content="Button" /> </Button> </StackPanel> 外側のButtonのClickイベントには、以下のようなMessageBoxを表示するコードを記述しています。 private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Click"); } 外側のボタンをクリックしたときに
病院は時間がかかりますが、皮ふ科に行ったら40代の人に今日は2時間以上かかると言われました。マッチングアプリ 50代というのは混むものだと覚悟してはいるものの、相当な会える人がかかるので、ホテルの中はグッタリしたマッチングアプリ 50代になってスタッフさんたちも平謝りです。近頃はマッチングアプリ 50代のある人が増えているのか、50代のシーズンには混雑しますが、どんどん人妻が長くなっているんじゃないかなとも思います。会える人は以前より増えて今年も近所に出来たのですが、ぼっちゃりの数が多すぎるのでしょうか。困ったものです。 先週、おかずの添え物に使うつもりでいたら、マッチングアプリ 50代を使いきってしまっていたことに気づき、かるめとパプリカと赤たまねぎで即席の付き合いたいを作ってその場をしのぎました。しかし20代にはそれが新鮮だったらしく、マッチングアプリ 50代なんかより自家製が一番とべ
現在C#にて、以下のような仕様でプロセス間通信を行うアプリケーションを作っているのですが、プロセスAから起動したプロセスBのメインウィンドウのハンドルが取得できないという問題に遭遇しました。 ユーザーの操作でプロセスAがプロセスBを起動。 プロセスAはプロセスBのメインウィンドウにWM_COPYDATAを用いてデータを送信。 プロセスBはプロセスAから受けた指示に従って各種動作を行う。 一番最初に書いたコードは、次のコードです。 このコードを実行すると、プロセスは起動できるのですがWaitForInputIdle()で起動したプロセスのメッセージループ突入まで待機しているにも関わらず、メインウィンドウのハンドルが取得できずに0が返って来ることがあります。 //プロセスを生成する。 Process p = new Process(); p.StartInfo.FileName = appPa
WPFアプリケーションでウィンドウプロシージャをフックしたい場合、HwndSource.FromHwndメソッドを呼び出して、HwndSourceオブジェクトを取得し、そのオブジェクトに対してHwndSource.AddHookメソッドを呼び出すことで行います。 MSDN : HwndSource クラス (System.Windows.Interop) 以下のコードは、WPFでは通常取得できない、ALT+F4キーの押下を検知して無効化するサンプルです。 当たり前ですがフックをWindowの生成が終わった後でないとエラーになります。サンプルでは、MainWindowクラスのLoadedイベント内でフックを実行しています。 <Window x:Class="WindowHookSample.MainWindow" xmlns="http://schemas.microsoft.com/win
Visual Studio 2013で親プロセスと子プロセスを同時にデバッグする方法について Visual Studio 2013でデバッグ中のアプリケーションが外部アプリケーションを起動した場合、その外部アプリケーションはデバッグの対象にはなりません。 Visual Studio での 1 つ以上のプロセスのデバッグ デバッガーは、子プロジェクトが同じソリューション内にある場合でも、デバッグ対象のプロセスによって開始された子プロセスに自動的にアタッチされません。 子プロセスをデバッグするには: 子プロセスが開始された後、そのプロセスにアタッチします。 または デバッガーの新しいインスタンスで子プロセスが自動的に開始されるように Windows を構成します。 上記のプロセスアタッチ方式及びレジストリ設定方式はデバッグ時の操作が煩雑となりますが、Microsoft Child Proces
概要 簡単に Bootstrap ライク な フラットデザイン の WPFアプリケーション 作成ができます。 "Twining"テーマ を利用した時の外観イメージは以下のようなものになります。 コントロール類は Bootstrap に似たデザインを、ウィンドウは枠のないフラットなデザインになるようなテーマになります。 使い方(導入) テーマのダウンロード 最新版を以下のページよりダウンロード GitHub - garafu / Twining : releases プロジェクトの新規作成 WPFアプリケーションを新規作成 ダウンロードした dll を配置 ダウンロードした Twining.dll は プロジェクト内の任意の位置へ配置します。 ここでは、"library" ディレクトリを作成してその配下へ配置しました。 参照設定に追加 参照に追加する際は「参照(B)...」からプロジェクトに
「ここが詰まったよ!WPF」シリーズということで第1弾は閉じる時に行う処理の追加についてご紹介します。 第何弾までやるのかは未定です。 目的 コードビハインド側で言うところの「OnClosing()」メソッドに処理を追加することをMVVMで実装する。 経緯 閉じるタイミングで何かしたいときってOnClosingに記述すれば基本的にOKなんですが protected override void OnClosing(CancelEventArgs e) { base.OnClosing(e); // 何か処理追加 } MVVM的にはこれはよろしくない。(と思っています。) そこで、どうしようかと考えた結果が以下。(かんろくのソース流用) 実装 見た目を変更して閉じるボタンを自前で用意していることが前提条件です。 デフォルトのままの閉じるボタンに処理の追加は僕にはできませんでした。(情報求ム)
標準のWPFプロジェクトからMVVMパターンを実装するのは困難な作業です。そんな時にMVVMの補助ライブラリ導入を検討すると思います。 MVVM Light Toolkit、Prism、Livetなどがありますが今回は国産のLivetを導入し、サンプルプログラムを作成しました。 サンプルソースの内容は以下のとおりです。.NET Framework4.5,Livet1.2.0 TextBoxのGotFocus時に選択状態にしております。 TextBox(1)のLostFocus時にTextBox(1)からTextBox(3)にコピー処理を行っています。 クリア処理。TextBox(1)からTextBox(3),TextBlock背景色,選択したファイル名を初期状態に戻します。 Windowの大きさを変更します。 TextBlock背景色を変更します。 ファイルダイアログを表示します。 Win
WPF(Windows Presentation Foundation)が登場してから約4年経つが、Windowsベースの業務アプリケーション開発におけるUI技術としては、今もなおWindowsフォームが主流といえる状況だ。現在はWindowsフォームでこと足りていたとしても、WPFの採用を検討すべきなのか? 相応のコストやリスクを払っても、WPFに移行する価値はあるのだろうか? 本セッションでは、こうした疑問に対するいくかのヒントが示された。 単純なスピード比較よりも、なめらかなユーザーインターフェイスに注目 「WPFはGPUを活用しているため、Windowsフォームよりも描画パフォーマンスが良い」とよくいわれているが、本当にそうなのか? グレープシティの八巻氏は、それを検証するために、WPFとWindowsフォームのパフォーマンス比較のデモを実施した。 まず、WindowsフォームとW
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く