WPF

Q114. XamComboEditor のアイテムのマージンを任意に設定したい

A.このところベンダーさんのコントロールに偏り過ぎた内容のため FAQと名乗っていいのかかなり怪しくなってきましたが(汗)、そこは個人ブログの備忘録ということでお許し頂きたく思います。 前回に引き続き XamComboEditor の話です。以下の画像を見てのと…

Q113. XamComboEditor のチェックボックスをバインドしたい

A.またまた備忘録。Infragistics社のWPFコントロール群に含まれているコンボボックス「XamComboEditor」ですが、CheckBoxVisibility プロパティを True にすると「チェックボックス付きコンボボックス」に変わります。 これ、なかなか便利そうなんですが、…

Q112. XamDataGrid でネストされたレコードのヘッダをデザインする

A.昨日のエントリに引き続き、ネストレコードに関する備忘録です。XamDataGrid でネストレコードが存在する場合、ネストレコード側のヘッダのみ変更する方法について色々調べたところ、二つ目のFieldLayout 内でスタイルを設定すればいいことがわかりました…

Q111. XamDataGrid でネストされたレコードのフィールドを設定する

A.備忘録です。XamDataGrid でネストされたレコードが存在する場合、どうすればラベルや列幅が設定できるか判らなかったのですが、XamDataGrid.FieldLayouts で二つ目の FieldLayout に設定すればいいことがわかりました。 以下、スニペットです。ネストさ…

xamSchedule を弄ってみる(その3)

前日・前々日に引き続き、本日も 「xamSchedule」 ネタを取り上げたいと思います。CodeZine のInfragistics・池原さんの記事参考記事: Silverlight/WPFでデータバインディングを利用しOutlookライクなスケジュールを構築する その1 Silverlight編では取り上…

xamSchedule を弄ってみる(その2)

前日のエントリに引き続き 「xamSchedule」 ネタです。本日は以下の記事の VB 化を試みました。 参考記事: Silverlight/WPFでデータバインディングを利用しOutlookライクなスケジュールを構築する その3 WCF サービス 接続編 VisualBasicで Silverlight ア…

xamSchedule を弄ってみる(その1)

現在、次の案件のため Infragistics さんのスケジュールコントロール 「xamSchedule」 を調査中です。WPF サンプルブラウザーを見てると面白そうな機能がテンコ盛りなんですが、如何せんネットの情報の少なさには泣けてきますね。チュートリアルを実践し、サ…

Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい

A.XamDataGrid でユーザーが操作した列の移動や並び替え、グループ化やソートを次回起動時用に保存したいというケースがあります。その場合、XamDataGrid.SaveCustomizations メソッドやXamDataGrid.LoadCustomizations メソッドを使えば、レイアウトの保存…

Q109. XamDataGrid のレポートフッターに印刷日時やページ数を表示したい

A.Infragistics.Windows.Reporting.Report.PageFooterTemplate プロパティに、XAMLで定義した DataTemplate リソースを設定します。ヘッダーも Report.PageHeaderTemplate プロパティに DataTemplate を設定できます。 以下サンプルです。 <igDP:XamDataGrid.Resources> <DataTemplate x:Key="FooterTemplate"> <Grid Margin="5"> <Grid.ColumnDefinitions> </grid.columndefinitions></grid></datatemplate></igdp:xamdatagrid.resources>

Q108. XamDataGrid の印刷時に余白や印刷方向を設定したい

A.Infragistics.Windows.Reporting.Report.ReportSettings プロパティを設定します。 なおReportSettings クラスのプロパティ一覧ですが、12.1以降のバージョンだとオンライン・オフラインともリングが切断されていて見当たりません。11.2 ならあるようなの…

Q107. XamDataGrid の内容を印刷時にプレビューを表示したい

A.Infragistics.Windows.Reporting.XamReportPreview を要素に持つ画面を呼び出せばプレビューを表示できます。 以下サンプルです。 // C# using Infragistics.Windows.Reporting; public partial class MainWindow : Window { private void Button_Click(O…

Q106. XamDataGrid の表示内容をそのまま印刷したい

A.コードビハインドで Infragistics.Windows.Reporting.Report クラスを使えば、簡単に印刷できます。列幅の変更・ソート・列の移動やフィルタリング等、ユーザーが任意に行った設定や、XamDataGrid に設定したテーマがそのまま印刷に反映されます。 以下サ…

コードビハインドで Livet の EventListener を使ってみる

必要に迫られてちょっと考えてみました。しかしイベントの登録・解除・アクションの指定を集中管理できるので、いい感じです。 using Livet; using Livet.EventListeners; using System; using System.Windows; namespace LivetWPFApplication5.Views { publ…

Q105. ListBox 等で、コレクションを操作せずソートするには

A.ItemoSource でバインドされたコレクションを操作せずに コントロールで並び替えを行いたい場合が多々あると思います。その場合、リソース内で CollectionViewSource を使えば、コレクションを操作せずにソートすることができます。 以下サンプルです。Vi…

Q104. WPF でツールチップをバルーン形式にするには?

A.吹き出し図形をレンダリングする Callout クラスを使います。なおこのクラスは Blendのアセンブリ「Microsoft.Expression.Drawing」で提供されていますので、事前に参照設定に追加しておく必要があります。以下サンプルです。このサンプルではツールチッ…

Q103. WPF で未処理例外に対応するには?

A.DispatcherUnhandledException イベントを使用します。以下サンプルです。未処理例外情報をイベントログに保存します。 なお DispatcherUnhandledException イベントだけだとUIスレッドの未処理例外しか捕捉できません。UIスレッド以外の未処理例外も捕捉…

Q102. ListBox で一行おきに背景色を変えるには?

A.StyleSelector を使用します。以下サンプルです。奇数行と偶数行で背景色を設定します。 まず StyleSelector を継承したクラスを作成し、奇数行・偶数行のスタイルを保持するようプロパティを設けます。そして SelectStyle メソッドをオーバーライドし、…

Q101. ListBoxItem で子要素の編集時に強調表示するには?

A.IsKeyboardFocusWithin プロパティが True の場合、IsSelected プロパティを true にするよう、ListBoxItem のスタイルにトリガーを設定します。DataTemplate で ListBoxItem に TextBox などの編集用コントロールを設けた場合、子要素の TextBox にフォ…

Q100. リストボックスの選択行の背景色を変更するには?

A.SystemColors.HighlightBrushKey を上書きします。以下のサンプルでは選択行の背景色を赤に変更しています。また SystemColors.ControlBrushKey を上書きすると、リストボックスのフォーカスが外れても選択行の強調表示を保持することが出来ます。 <ListBox ItemsSource="{Binding Persons}" IsSynchronizedWithCurrentItem="True" SelectedIndex="0" Grid.Row="1" > <ListBox.Resources> </listbox.resources></listbox>

Q099. コンボボックスの項目に整数リテラル値を設定するには?

A.ComboBoxItem を使わなくても、直接数値を設定することができます。 <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="130" Width="250"> <Grid> </grid></window>

Q098. 最大化ボタンを有効にしながら、ユーザーによるサイズ変更を不可にするには?

A.WPF の Window は ResizeMode プロパティを NoResize にすると最大化ボタン等が非表示になります。Window.OnStateCnanged メソッドをオーバーライドするか、HwndSource クラスにメッセージを処理するウィンドウプロシージャを登録します。本記事は、以下 …

Q097. XamDataGrid でフィルタリングされたレコードのコレクションを取得するには?

A.DataRecord.IsFilteredOut プロパティを条件に、クエリで簡単に取得できます。 #2015/02/05 追記: IsFilteredOut の戻り値が Null許容型なので、今更ながら GetValueOrDefault メソッド使わなきゃ駄目なことに気づいた (汗 WPF FAQ の目次に戻る

Q096. DataGrid でセルの値を変えると背景色が変わるようにするには?

A.DataGridColumn.CellStyle にスタイルを定義し、トリガーを設定します。 以下は、Livet を使ったサンプルです。 まず Model に Person クラスを用意しました。名前と所属と住所だけの簡単なクラスです。ちなみに名前空間はコードの都合上、省略してますの…

Q095. DataGrid でソートを制御にするには?

A.DataGrid.CanUserSortColumns プロパティでグリッド全体のソート可否を制御できます。 列ごとにソートの有効/無効を設定するには DataGridColumn.CanUserSort プロパティを設定してください。DataGrid.CanUserSortColumns を False にした場合、列ごとの…

Q094. XamDataGrid で 「フィールドの選択」 のタイトルを変更するには?

A.「フィールドの選択」 のタイトルは通常変更することができません。しかし FieldChooser のインスタンスを取得し、Parent の ToolWindow.Title を設定すれば変更が可能です。 以下、サンプルです。前回はコードビハインドで実装しましたが、今回はインタ…

Q093. XamDataGrid で 「フィールドの選択」 のグループ名を変更するには?

A.FieldLayout.Description プロパティを設定します。 通常「フィールドの選択」のグループ名には、フィールドのグループ名が表示されます。 グループ名を任意の文字列にしたい場合、FieldLayout.Description プロパティを設定すると、グループ名から指定し…

Q092. Binding.RelativeSource の使い方がよくわからない

A.Binding.RelativeSource の使い方がいまいちよくわからなかったので、サンプルを使ってまとめてみました。 MSDN の説明によると バインディング ターゲットの位置に対して相対的な位置を指定することにより、バインディング ソースを取得または設定します…

Q091. XamDataGrid で特定データの前景色を変更後、マウスホバー行や選択セルに設定した前景色を反映するには?

A.CellValuePresenter クラスのスタイルで、ForegroundActiveStyleプロパティ・ForegroundActiveStyle プロパティを編集します。 以下のサンプルでは、department 列が「事務」のレコードの前景色を赤に設定してますが、変更した行の上にマウスを移動したり…

BackgroundWorker を使用して進行状況ダイアログを作成する(WPF & Livet版)

必要に迫られ、DOBON.NET さんの以下の記事BackgroundWorkerクラスを使用して進行状況ダイアログを作成するを参考に、WPF & Livet で進行状況ダイアログを作ってみました。 ダイアログは Forms からも呼び出せることを想定したインターフェイスになってます…

Q090. WPF でタスクトレイアイコンを表示するには?

A.WindowsForms の NotifyIcon クラスを使用します。 WPF では残念ながらタスクトレイアイコンの機能が提供されていません。以下の記事で触れられてますが、WPF はプレゼンテーションライブラリだからということで、MS さんはサポートする気がさらさらない…