け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト
昨日はWiiFitやり過ぎて片足だけ筋肉痛。どんだけバランス悪いんよ俺……
でも一応は1時間プレイして0.5kg減。順調に減ってますね〜♪
あ、それに時間取りすぎたので書く事ありません(ぉぃ
と、さすがにそれではアレなので続きにXAMLの小技でも。
WPFアプリではXAMLでUIを定義し、コードからは極力切り離すような設計を行うようになっています。
肝心のデータはバインディングを駆使し、それによるUIの変化はTemplateやStyleを使って表現。アクションはCommand連結で。
慣れてくるとかなり楽しいです(笑)
で、ちょっと悩んだのがツールバーに配置したボタンのOn/Off。
仕様は以下の通り。
つまりツールバーにはリストボックスに表示されたデータの「新規作成」「編集」「削除」の基本操作ボタンが割り当てられているわけです。
新規作成はいつでも可能ですが、編集・削除に関しては当然、対象となるデータが必要になります。
WPFのリストボックスはフォーカスを失っても選択状態を失わないので、切り替え不要のように見えますが、データがない場合もありますし、選択状態をなくす方法はいくらでもあるので、きちんと切り分けておく必要があります。
んで、各項目の説明。
バインドなどの詳細は「方法 : コレクションにバインドして選択に基づく情報を表示する」を参照してください。
リストボックスやContentControlが受け取るデータリスト、それを取得するためのアダプタクラスを作成。
class ExampleListProvider {
ObservableCollection<Example> GetList() { ... } // データのリストを返すC#コード
}
<Window.Resources>
<ObjectProvider x:Key="ExampleList" ObjectType="{x:Type l:ExampleListProvider}" MethodName="GetList" />
</Window.Resources>
<ListBox Name="ExampleListBox" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource ExampleList}}" />
<ContentControl Content="{Binding Source={StaticResource ExampleList}}">
<ToolBar>
<Button Command="ApplicationCommands.New">新規作成</Button>
<Button Command="ApplicationCommands.Edit">編集</Button>
<Button Command="ApplicationCommands.Delete">削除</Button>
</ToolBar>
</ContentControl>
<Button Command="ApplicationCommands.Edit" CommandParameter="{Binding}">編集</Button>
<Button Command="ApplicationCommands.Delete"> CommandParameter="{Binding}">削除</Button>
コレで連結可能になるものの、連結されたデータがnullだと予期せぬエラーが出る。
<Window.Resources>
<Style x:Key="ToolBarButton" TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value="0.5" />
</Trigger>
</Style.Triggers>
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
</Style>
</Window.Resources>
<Button Command="ApplicationCommands.Edit" CommandParameter={Binding}" Style="{StaticResource ToolBarButton}">編集</Button>
<Button Command="ApplicationCommands.Delete"> CommandParameter="{Binding}" Style="{StaticResource ToolBarButton}">削除</Button>
通常は有効・不透明とし、CommandParameterにnullが入っているときのみ無効・半透明化する。
リスト(の親コントロール)からフォーカスが外れた際にリストの選択状態を解除する手法がよくわからない。
現状では対象となるコントロールにLostFocusイベントハンドラを指定、その中で ExampleListBox.SelectedValue = null; と指定している。
XAMLでイベントハンドラトリガーを利用すればうまく行きそうだが……?
OVA『バカとテストと召喚獣 〜祭〜』上巻 [Blu-ray]
(メディアファクトリー)
新品 ¥ 4,409
中古 ¥ 3,680
OVA『バカとテストと召喚獣 〜祭〜』下巻 [Blu-ray]
(メディアファクトリー)
新品 ¥ 4,438
中古 ¥ 2,980
生徒会役員共DJCD「アニメ生徒会役員共が全部わかるラジオ、略して全ラ!...
(キングレコード)
新品 ¥ 2,238
中古 ¥ 1,850
WORKING!! 9 初回限定特装版 (SEコミックスプレミアム)
(高津 カリノ)
新品 ¥ 2,896
中古 ¥ 2,835
「声優グランプリ」公認!声優界<雀王>決定戦! <J-1グランプリ> V...
(オムニバス)
新品 ¥ 3,159
中古 ¥ 3,099
デッドライジング 2【CEROレーティング「Z」】
(カプコン)
新品 ¥ 2,740
中古 ¥ 1,014
スプリンターセル コンヴィクション
(ユービーアイ ソフト)
新品 ¥ 2,979
中古 ¥ 1,397
Xbox 360 250GB
(マイクロソフト)
新品 ¥ 34,980
中古 ¥ 25,400
学園黙示録 HIGHSCHOOL OF THE DEAD 7 オリジナル...
(佐藤 大輔)
新品 ¥ 9,800
中古 ¥ 4,797
学園黙示録 HIGHSCHOOL OF THE DEAD SECRET ...
(佐藤 大輔)
中古 ¥ 2,500
ソードアート・オンライン〈5〉ファントム・バレット (電撃文庫)
(川原 礫)
中古 ¥ 692
RPG W(・∀・)RLD6 ―ろーぷれ・わーるど― (富士見ファンタ...
(吉村 夜)
新品 ¥ 651
中古 ¥ 1
魔法少女リリカルなのはViVid (3)限定版 (角川コミックス・エース...
(藤真 拓哉)
新品 ¥ 1,680
中古 ¥ 1,338
魔法戦記リリカルなのはForce (3)限定版 (角川コミックス・エース...
(緋賀 ゆかり)
新品 ¥ 1,680
中古 ¥ 418
ダンジョンズ&ドラゴンズ第4版スターター・セット
(ジェームズ ワイアット)
新品 ¥ 4,980
中古 ¥ 4,311
アリアンロッド・サガ・リプレイ(5) 激闘のピースメイカー (富士見ド...
(菊池 たけし/F.E.A.R.)
新品 ¥ 693
中古 ¥ 190
アリアンロッド・サガ・コンチェルト 1 (電撃コミックス)
(佐々木 あかね)
新品 ¥ 599
中古 ¥ 90
堀さんと宮村くん(7)(ガンガンコミックスONLINE)
(HERO)
新品 ¥ 1,000
中古 ¥ 747
浅尾さんと倉田くん(3)(ガンガンコミックスONLINE)
(HERO)
新品 ¥ 690
中古 ¥ 370
7と嘘吐きオンライン―HERO個人作品集―(ガンガンコミックスONLIN...
(HERO)
新品 ¥ 710
中古 ¥ 158
ONE PIECE 65 (ジャンプコミックス)
(尾田 栄一郎)
NARUTO―ナルト― 59 (ジャンプコミックス)
(岸本 斉史)
ワンピース 海賊無双(通常版)(初回特典:オリジナルカスタムテーマ9種DLコード、ソーシャルゲーム専用レアフィギュア用コード同梱)
(バンダイナムコゲームス)
ドラゴンズドグマ(数量限定特典『バイオハザード6』体験版用DLコード同梱)
(カプコン)