メモの日々


2018年09月07日(金) [長年日記]

[c#] WPFの読み取り専用TextBoxでカーソルを有効にする

WPFのTextBoxコントロールはReadOnlyプロパティの値をtrueにすると読み取り専用にできる。

ただ、こうするとTextBoxにカーソル(キャレット)が表示されなくなり、例えば長い行が表示された際にカーソルキーを使って右にスクロールさせるという操作ができなくなってしまう(マウスを使えば操作できるけれど)。

そういうものかと思っていたが、TextBoxにはIsReadOnlyCaretVisibleというプロパティがあることを知った。

Gets or sets a value that indicates whether a read-only text box displays a caret.

このプロパティの値をtrueにすれば、読み取り専用だがカーソルキーで操作できるTextBoxを表示できる。


2018年09月12日(水) [長年日記]

[c#] WPFのコンテキストメニューのイベントハンドラでターゲットのコントロールを得る

WPFにおいて、コンテキストメニューアイテムのクリックに対するイベントハンドラーにてそのコンテキストメニューが張り付いているコントロールを得る方法がなかなか分からなかったのでメモ。

コンテキストメニューのXAMLは次の通り。

<ContextMenu x:Key="contextMenu">
    <MenuItem Header="メニューです" Click="OnClick"/>
</ContextMenu>

OnClickイベントハンドラのシグネチャは次のようになる。

private void OnClick(object sender, RoutedEventArgs e)

OnClick()内で上のコンテキストメニューが張り付いているコントロールを得たい。senderから次のように辿れば目的のコントロールを取得できるようだ。

  • senderにはMenuItemオブジェクトが設定される。
  • MenuItemオブジェクトのParentプロパティにContextMenuオブジェクトが設定されている。
  • ContextMenuオブジェクトのPlacementTargetプロパティにコンテキストメニューが張り付いているコントロールが設定されている。

メモしてみると当たり前なことに感じる。なかなか分からなかったのは、もっと簡単に取得できるはずだと考えたからかなあ。


2018年09月13日(木) [長年日記]

[life] 保育園への送り

歩かない問題への対処として、マンホールの蓋の上に乗ったら抱っこして次のマンホールの蓋の上で降ろす、ということをしてみた。すると、降ろしたあと次のマンホールの蓋まで喜んで歩いて(走って)くれる。これで行程の半分は歩いてもらえるようになった。