FAQ

Q069. 文字列として中括弧"{}"を扱うには?

A. エスケープシーケンスを使います。文字列の先頭に "{}" を設定すると、後続の中括弧を文字列として認識できます。 関連記事: {} エスケープ シーケンス/マークアップ拡張機能 以下の例では SummaryDefinition.StringFormat プロパティに書式文字列を渡…

Q068. View の Window ハンドルを取得するには?

A. 状況によっては Window のハンドルを取得したい場合があります。そのような場合は WindowInteropHelper クラスの Handle プロパティを使えばハンドルを取得できます。 VB.NET Dim helper = New System.Windows.Interop.WindowInteropHelper(Me) MessageB…

Q067. 現在アクティブな Window のインスタンスを取得するには?

A. 以下のようにApplication.Current.Windows コレクションを走査して、アクティブな Window を検索すればいいです。 VB.NET Application.Current.Windows.OfType(Of Window).SingleOrDefault(Function(w) w.IsActive) C# Application.Current.Windows.OfTy…

Q066. ViewModel のコマンド内でマウスカーソルを変更するには?

A. Mouse.OverrideCursor プロパティを使ってアプリケーションのカーソルを設定できます。 MVVM パターンだと ViewModel から View の操作をしないため、コマンド実行時にどうやって Window のマウスカーソル変更すんだろうとしばらく考えてましたが、いろ…

Q065. 簡単に検証インジケーターを表示するには?

GrapeCity 社の InputMan for WPF に含まれている GcValidationIndicator を使うと簡単です。検証を行う要素名を ElementName プロパティに設定するだけです。 <im:GcValidationIndicator ElementName="GcNumber1"/> 以下、某所に上げたサンプルです。二つの数値コントロールの値を乗算した結果が 12 を超えると</im:gcvalidationindicator>…

Q064. 左クリックで ContextMenu を表示するには?

A. Blend SDK の ChangePropertyAction ビヘイビアーを使用します。以下サンプルです。先日のエントリの XAML を改造し、TextBox を Button に変更しています。Button を左クリックすると ContextMenu を表示します。

Q063. WPF でショートカットメニューを表示するには?

A. ContextMenu を使用します。 以下、Livet を使った簡単なサンプルです。TextBox に ContextMenu を設け、右クリックでポップアップを表示、選択したメニューを TextBox に表示します。

Q062. XamDataGrid でセルにボタンを表示するには?

A. スタイルで CellValuePresenter のテンプレートを設定し、表示したい Field の FieldSettings.CellValuePresenterStyle に指定します。

Q061. XamDataGrid で別の列の値をツールチップで表示するには?

A. CellValuePresenter のスタイルを設定します。以下のサンプルのように、XAML 内で自身のレコードのセルを参照することができます。でも XAML 内で添字も使えたんですね。初めて知った時はかなり驚きました。

Q060. WPF で Google Map API を使うには?

A. WebBrowser コントロールを使います。以下は NavigateToString メソッドを使ったサンプルです。Google Maps API の使い方については以下の記事を参考にさせて頂きましたが、たいへん判りやすいサイトで助かりました。 関連記事 :Google Maps入門(Google…

Q059. XamDataGrid に DataTable をバインドするには?

A. DataSource プロパティに DataView をバインドします。現在アクティブなデータは ActiveDataItem プロパティで取得・設定できます。以下、ViewModel を使った簡単なサンプルです。Model がないのでいわゆる MVVM パターンではありませんが、バインディン…

Q058. XamDataGrid でセルに収まらない値をツールチップで表示するには?

A. いささか凝った方法ですが、MultiDataTrigger と IMultiValueConverter を使って設定します。

Q057. XamDataGrid でユーザーが列の表示状態を任意に設定できるようにするには?

A. FieldLayoutSettings.HeaderPrefixAreaDisplayMode プロパティを FieldChooserButton に設定します。 <igDP:XamDataGrid Grid.Row="1" BindToSampleData="True" > <igDP:XamDataGrid.FieldLayoutSettings> <igDP:FieldLayoutSettings HeaderPrefixAreaDisplayMode="FieldChooserButton" /> </igDP:XamDataGrid.FieldLayoutSettings> <…</igdp:xamdatagrid>

Q056. XamDataGrid で列を固定表示するには?

A. Field クラスを使って設定します。 データソースの列とバインドさせるには Field.Name プロパティに列名を指定します。Name プロパティに列名指定するのってやや気持ち悪い仕様になっててベンダーさんも認識してるようですが、WPF 1.0 くらいからの仕様…

Q055. XamDataGrid で「エリアごとのグループ化」機能を無効にするには?

A. XamDataGrid の目玉機能の一つで、これはかなり強力な機能なんですが、シーンによっては無効にしたいケースもあります。その場合、XamDataGrid.GroupByAreaLocation プロパティを None に設定します。 <igDP:XamDataGrid BindToSampleData="True" GroupByAreaLocation="None" /> 標準では「エリアごとのグループ化」機能が有効に</igdp:xamdatagrid>…

Q054. XamDataGrid で掛線を指定するには?

A. Style で CellValuePresenter.BorderThickness プロパティと CellValuePresenter.BorderBrush プロパティを設定します。以下のサンプルの場合、上下左右すべての BorderThickness を同じにすると、左右で重なるところが重複して描画されてしまい見苦しく…

Q053. XamDataGrid でマウスオーバー時のブラシを無効にするには?

A. Style で DataRecordCellArea クラスの BackgroundHover プロパティと BorderHoverBrush プロパティをヌルに設定します。 <Style TargetType="{x:Type igDP:DataRecordCellArea}"> <Setter Property="BackgroundHover" Value="{x:Null}"/> <Setter Property="BorderHoverBrush" Value="{x:Null}"/> </Style> ・・・・・…

Q052. XamDataGrid で一行おきの強調表示のブラシを変更するには?

A. Style 定義で DataRecordCellArea.BackgroundAlternate プロパティにブラシを設定します。以下のサンプルでは、一行おきのブラシをピンクに変更してます。 <Style TargetType="{x:Type igDP:DataRecordCellArea}"> <Setter Property="BackgroundAlternate" Value="Pink" /> </Style> ・・・・・・ <igDP:XamDataGrid BindToSampleData="True" > </igdp:xamdatagrid>

Q051. XamDataGrid で一行おきに行を強調表示するには?

A. FieldLayoutSettings.HighlightAlternateRecords を True に設定します。以下のサンプルでは強調表示を見やすくするため、テーマを Office2007Black に設定してます。 <igDP:XamDataGrid BindToSampleData="True" Theme="Office2k7Black" > <igDP:XamDataGrid.FieldLayoutSettings> <igDP:FieldLayoutSettings HighlightAlternateRecords="True" /> </igdp:fieldlayoutsettings></igdp:xamdatagrid.fieldlayoutsettings></igdp:xamdatagrid>

Q050. XamDataGrid でサンプルデータを簡単に表示するには?

A. XamDataGrid.BindToSampleData を True にするだけで以下のようにサンプルデータを表示します。これなかなか気の利いた機能で関心しますね。XamDataGrid のデザイン編集中は BindToSampleData を True にしとくといいですね。 <igDP:XamDataGrid BindToSampleData="True" /> BindToSampleData を True</igdp:xamdatagrid>…

Q049. DataGrid の行の高さをセル内容に応じて自動的に変えるには?

A. DataGrid.CellStyle ・DataGrid.RowStyle でグリッド行とセルの高さを Auto に設定します。 <DataGrid > <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Height" Value="Auto" /> </Style> </DataGrid.RowStyle> <DataGrid.CellStyle> <Style TargetType="DataGridCell"> </datagrid.cellstyle></datagrid>

Q048. Window の最小化・最大化ボタンを無効にするには?

A. SetWindowLong で Window スタイルを設定します。 (2011/07/25 追記)リサイズ不可で最大化だけ無効にしたいなら ResizeMode を CanMinimize に設定するといいです。 関連記事 :Windowの最小化、最大化ボタン 実は私も id:akiramei さんと同じく、ユー…

Q047. ショートカットキーでイベントもしくはコマンドを実行するにはどうすればいいのですか?

A. KeyBinding を使います。 例えば画面を閉じる処理を F12 キーと結び付けたい場合、以下のようにします。 まず Window のコードビハインド側に以下のコードがあるとします。(とりあえず VB ですが・・・) Partial Public Class Window1 ''' <summary>閉じるを実行</summary>…

Q046. 文字列に改行を設けるには?

A. 特殊文字「&#10;」を使うか、 タグを使います。 <TextBox Text="僕と契約して魔法少女になってよ。&#10;わけわかんないよ。&#10;この宇宙のために死んでくれる気になったら、いつでも声をかけて。待ってるからね♪" > <TextBox.ToolTip> <TextBlock > 僕と契約して魔法少女になってよ。<LineBreak/> わけわかんないよ。<LineBreak/> この宇宙のために死んでくれる気になったら、いつでも声をかけて。待ってるからね♪ </TextBlock> </TextBox.ToolTip> </TextBox> #2014/11/07 改…

Q045. Infragistics 社の XamDateTimeEditor や XamNumericEditor 等、 XamMaskedEditor を継承したクラスでフォーカスがあるか判定するには?

A. このコントロールは UIElement.IsFocused プロパティではフォーカスがあるか正常に取得できないようですが、XamMaskedEditor.IsFocusWithin プロパティを使うと、コントロールにフォーカスがあるか判定できるようです。 <Style TargetType="{x:Type igEditors:XamDateTimeEditor}"> <Style.Triggers> <Trigger Property="IsFocusWithin" Value="true"> </trigger></style.triggers>

Q044. WPF で Tab オーダーを細かく設定する方法は?

A. Windows Forms なら、デザイナでフォームを開き、「表示」→「タブオーダー」で現在のタブインデックスが表示され、クリック順でタブインデックスを設定することができます。 関連記事 : Windows アプリケーションの利点 関連記事 : コントロールのTabI…

Q043. ComboBox.IsEditable プロパティを True にすると、IsTabStop プロパティを False にしてもタブストップが有効のままなんですが。(-ω-

A. これは ComboBox の仕様バグとしか思えません。止むを得ないのでタブストップが無効になるようテンプレートを編集します。 ComboBox 子要素の編集用テキストボックス「PART_EditableTextBox」に、親要素の IsTabStop プロパティの値をバインドするように…

Q042. DataGrid のセルの値を書式設定したいのですが・・・

A. コンバータークラスを用意し、 Binding.Converter プロパティに設定します。 以下の例は、数値データを単純に #,##0 形式で表示するサンプルです。 Double や Decimal 型のデータをバインドすると少数点以下を 123,456.00 と表示してしまうことがあるの…

Q041. DataGrid のセルの値を中央や右寄せで表示したいのですが、どうすればいいですか?

A. DataGridTextColumn.ElementStyle プロパティ でスタイルを設定します。 <DataGridTextColumn Header="登録日" Width="40" Binding="{Binding Path=regist_date}" > <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}" > <Setter Property="Margin" Value="2" /> </setter></datagridtextcolumn.elementstyle></datagridtextcolumn>

Q040. Application.xaml に定義したリソースを動的に参照したい場合、どうすればいいのですか?

A. Application.FindResource メソッド を使用します。 WPF FAQ の目次に戻る