会社で WPF (.NET Framework 3.5)を利用してアプリを開発していた。
NavigationWindow を用いた SDI で。
Binding を利用し、
DataContext側は IDataErrorInfo と INotifyPropertyChanged を実装し、 XAML側で TextBox のバインド時に ValidatesOnDataErrors を設定していた。
こうしていると、データがエラーであるとすると TextBox が ErrorTemplate のスタイルで指定された表示になる。
(デフォルトは TextBox の場合は枠線が赤くなる。)
当初は default の NavigationWindow で開発していたが
メニューのある先頭へ戻るボタンを追加するために
他の人がカスタムの NavigationWindow の Template に置き換えた。
あるとき、バインドしている TextBox で、
ValidatesOnDataErrors を True にしているにもかかわらず、
エラーがある欄の枠が赤く囲まれないようになっていることに気が付いた。
当初はスタイル設定のミスかとも思ったが全体的におこっていることが判明した。
・・・とすると怪しいのは NavigationWindow の Template 設定のあたり。
実際、Template の設定を外すと元の動きにもどった。
とりあえず、Microsoft の MSDN のサイトから
「カスタム NavigationWindow ユーザー インターフェイスのサンプル」
http://msdn.microsoft.com/ja-jp/library/aa358506(vs.90).aspx
(ショートカット http://bit.ly/9CAtUj )
を取ってきて見てみた。
見比べて、こっちのコードにおかしい点は見当たらない。
というか、このサンプルを参考に作った感じがする。
いろいろ調べているうちに、別のサンプルを見つけた。
「NavigationWindow ControlTemplate の例」
http://msdn.microsoft.com/ja-jp/library/aa970054(vs.90).aspx
(ショートカット http://bit.ly/9EadYQ )
で、こっちのサンプルと比べてみると、先のサンプルとの違いが見つかった。
XAMLで後者は ContentPresenter が AdornerDecorator で囲まれているが、前者は囲まれていなかったのである。
で、開発中のアプリの NavigationWindow の Template の ControlPresenter のところを AdornerDecorator で囲ってみた。
するとエラー時に赤く囲まれるようにもどった。
もう少し調べみたが、AdornerDecorator で囲っていないと、Drag’n Drop も動かなくなるようだ。
http://pavanpodila.spaces.live.com/blog/cns!9C9E888164859398!187.entry
-------
2010年4月17日追記
MSDN Library が .NET Framework の 4.0 への移行中でリンク先にサンプルファイルが無いので明示的に .NET Framework 3.5 のコンテンツへのリンクするように URL を記述した。
ただし、ここの日記サイトは()の URL を認識しないので、ショートカットも追加
NavigationWindow を用いた SDI で。
Binding を利用し、
DataContext側は IDataErrorInfo と INotifyPropertyChanged を実装し、 XAML側で TextBox のバインド時に ValidatesOnDataErrors を設定していた。
<TextBox Text="{Binding
Path=データ,
ValidatesOnDataErrors=true, ValidatesOnExceptions=true}" />
こうしていると、データがエラーであるとすると TextBox が ErrorTemplate のスタイルで指定された表示になる。
(デフォルトは TextBox の場合は枠線が赤くなる。)
当初は default の NavigationWindow で開発していたが
メニューのある先頭へ戻るボタンを追加するために
他の人がカスタムの NavigationWindow の Template に置き換えた。
あるとき、バインドしている TextBox で、
ValidatesOnDataErrors を True にしているにもかかわらず、
エラーがある欄の枠が赤く囲まれないようになっていることに気が付いた。
当初はスタイル設定のミスかとも思ったが全体的におこっていることが判明した。
・・・とすると怪しいのは NavigationWindow の Template 設定のあたり。
実際、Template の設定を外すと元の動きにもどった。
とりあえず、Microsoft の MSDN のサイトから
「カスタム NavigationWindow ユーザー インターフェイスのサンプル」
http://msdn.microsoft.com/ja-jp/library/aa358506(vs.90).aspx
(ショートカット http://bit.ly/9CAtUj )
を取ってきて見てみた。
見比べて、こっちのコードにおかしい点は見当たらない。
というか、このサンプルを参考に作った感じがする。
いろいろ調べているうちに、別のサンプルを見つけた。
「NavigationWindow ControlTemplate の例」
http://msdn.microsoft.com/ja-jp/library/aa970054(vs.90).aspx
(ショートカット http://bit.ly/9EadYQ )
で、こっちのサンプルと比べてみると、先のサンプルとの違いが見つかった。
XAMLで後者は ContentPresenter が AdornerDecorator で囲まれているが、前者は囲まれていなかったのである。
で、開発中のアプリの NavigationWindow の Template の ControlPresenter のところを AdornerDecorator で囲ってみた。
するとエラー時に赤く囲まれるようにもどった。
もう少し調べみたが、AdornerDecorator で囲っていないと、Drag’n Drop も動かなくなるようだ。
http://pavanpodila.spaces.live.com/blog/cns!9C9E888164859398!187.entry
-------
2010年4月17日追記
MSDN Library が .NET Framework の 4.0 への移行中でリンク先にサンプルファイルが無いので明示的に .NET Framework 3.5 のコンテンツへのリンクするように URL を記述した。
ただし、ここの日記サイトは()の URL を認識しないので、ショートカットも追加
フルキーボード派だがアドエスの電池の寿命で諦めて Hybrid W-ZERO3 (HWZ3)を予約した。
HWZ3 の、テンキー入力に関して提灯記事をいろいろ読み、多少は期待した。
・・・しかし、期待は絶望を大きくしただけだった。
何故僕にフルキーボードが必要なのかと問われたこともあり、その理由を考えた。
僕の場合の理由は次の2点。
・英文字を比較的よく使う。
・空白をよく使う。
特に僕は段落の頭に空白を入れる。携帯のメールでも。また、英単語の前後にも空白を入れる。
先の提灯記事ではこの辺にふれていない。
またワンタッチ変換とかも実際に使ってみると実用レベルとは言えず、使い物にならなかった。
そして、テンキー入力はしなくなった。
しかし、テンキー入力を捨てることで逆に光が見えてきた。
あまり語られないが HWZ3 にはテンキー入力の他に windows mobile標準? のソフトキーパッドがある。
以前ソフトキーパッドを使ってみて、使い物にならないと思ったことがあったが、それはパソコンでマウスを使っているときだった。(http://10395.diarynote.jp/200807012144520000/ )
スタイラスを使っているときにはソフトキーパッドを使ってみるとこれが意外に快適に入力できる。
そして、携帯電話のテンキー入力用に予測変換の強化された IME で候補をタップして選択することでテンキー入力のみならず、小型キーボードに勝るとも劣らない効率で入力できる。
そういうわけで、現在は「ソフトキーパッド派」と自称している。
なお、ソフトキーパッドでの入力には精密なタップが必要になる。HWZ3純正のスタイラスではだめ。
ハト( http://www.miyavix.co.jp/product/miyavix/stylus_hato_v2/index.html ) を使いましょう。
=====
平成22年2月13日追記
テンキーでの空白入力に関する話は次を参照
http://10395.diarynote.jp/201002131813156080/
HWZ3 の、テンキー入力に関して提灯記事をいろいろ読み、多少は期待した。
・・・しかし、期待は絶望を大きくしただけだった。
何故僕にフルキーボードが必要なのかと問われたこともあり、その理由を考えた。
僕の場合の理由は次の2点。
・英文字を比較的よく使う。
・空白をよく使う。
特に僕は段落の頭に空白を入れる。携帯のメールでも。また、英単語の前後にも空白を入れる。
先の提灯記事ではこの辺にふれていない。
またワンタッチ変換とかも実際に使ってみると実用レベルとは言えず、使い物にならなかった。
そして、テンキー入力はしなくなった。
しかし、テンキー入力を捨てることで逆に光が見えてきた。
あまり語られないが HWZ3 にはテンキー入力の他に windows mobile標準? のソフトキーパッドがある。
以前ソフトキーパッドを使ってみて、使い物にならないと思ったことがあったが、それはパソコンでマウスを使っているときだった。(http://10395.diarynote.jp/200807012144520000/ )
スタイラスを使っているときにはソフトキーパッドを使ってみるとこれが意外に快適に入力できる。
そして、携帯電話のテンキー入力用に予測変換の強化された IME で候補をタップして選択することでテンキー入力のみならず、小型キーボードに勝るとも劣らない効率で入力できる。
そういうわけで、現在は「ソフトキーパッド派」と自称している。
なお、ソフトキーパッドでの入力には精密なタップが必要になる。HWZ3純正のスタイラスではだめ。
ハト( http://www.miyavix.co.jp/product/miyavix/stylus_hato_v2/index.html ) を使いましょう。
=====
平成22年2月13日追記
テンキーでの空白入力に関する話は次を参照
http://10395.diarynote.jp/201002131813156080/
Hybrid W-ZERO3 (HWZ3)では、アドエス(Advanced W-ZERO3[es])と違い、物理的なキーロックのスイッチが無い。正確には、システムロックとは別のキーロック機構が無いと言ったらいいか。
アドエスを使っていた時、僕はちょっとポケットに入れる時などこまめにキーロックを掛けるようにしていた。実際、キーロックを忘れてポケットに入れていて勝手に電話がかかったことが一度ならずあった。
HWZ3 は操作をやめると比較的すぐロック状態に落ちる。
まぁ、これ自体はそれほど気にならず、ポケットに入れても事故が起こりにくするためにはむしろ望ましいかも。(全く無くなるわけでは無く、ポケットから取り出したらいつの間にか時計の設定画面になってたりすることは結構あるが。)
面倒なのはロックの解除である。
1. まず、電源ボタンを押す。ちょっと長めに。
2. 画面が点灯し、画面にアイコンが現れる。このアイコンをドラッグして端までスライドさせる。
3. パスワードを設定している場合、その後にパスワードを入力する画面になる。
問題は 2. の操作。
Windows Mobile のせいか Hard のせいかわからないが、
このアイコンを指でドラッグする操作が難しい。指で画面をなぞっても反応しないことが多く、端までドラッグがうまくいかないことも多い。
そもそも 1.だけでキーロック解除としては十分である。特に 3. でパスワード入力をする場合は。
と、いうわけで切れた。
とりあえずロック画面について検索したらロック解除のアイコンの位置を変更点する方法に関する情報に辿り着いた。操作自体が邪魔なんでその発想はなかったが片手で操作する場合を考えたら確かにそのとおりである。
http://d.hatena.ne.jp/leg-end/20100130/1264862848
この情報によると、Hybrid W-ZERO3 でロック画面のデザインを司っているのは
「LS_LockScene_480x854.cpr」というXMLファイルらしい。
とりあえずパソコンにこのファイルをコピーし、エディタで見てみた。
頭の方に
と書いてある。
・・・・「OnPress="Unlock"」にしたら、スライドさせなくてもタップだけでよくなるんじゃね?
さっそく書き換える。必要かどうかはわからないがついでに「LS_LockScene_480x854_cust_fe.cpr」も書き換えた。
HWZ3 の元のファイルを上書きするのに苦労したが、、(少なくとも、一旦 HWZ3内に複写しておき、その後コピー&ペーストで上書きする必要があるようである。最終的にどうやったか正確には憶えていない)置き換えるとタップだけでパスワード入力画面に遷移するようになった。
とりあえず、かなり快適になった。ロック画面の文字列(「スライドしてください」)が実際と異なることは無視するとして。
アドエスを使っていた時、僕はちょっとポケットに入れる時などこまめにキーロックを掛けるようにしていた。実際、キーロックを忘れてポケットに入れていて勝手に電話がかかったことが一度ならずあった。
HWZ3 は操作をやめると比較的すぐロック状態に落ちる。
まぁ、これ自体はそれほど気にならず、ポケットに入れても事故が起こりにくするためにはむしろ望ましいかも。(全く無くなるわけでは無く、ポケットから取り出したらいつの間にか時計の設定画面になってたりすることは結構あるが。)
面倒なのはロックの解除である。
1. まず、電源ボタンを押す。ちょっと長めに。
2. 画面が点灯し、画面にアイコンが現れる。このアイコンをドラッグして端までスライドさせる。
3. パスワードを設定している場合、その後にパスワードを入力する画面になる。
問題は 2. の操作。
Windows Mobile のせいか Hard のせいかわからないが、
このアイコンを指でドラッグする操作が難しい。指で画面をなぞっても反応しないことが多く、端までドラッグがうまくいかないことも多い。
そもそも 1.だけでキーロック解除としては十分である。特に 3. でパスワード入力をする場合は。
と、いうわけで切れた。
とりあえずロック画面について検索したらロック解除のアイコンの位置を変更点する方法に関する情報に辿り着いた。操作自体が邪魔なんでその発想はなかったが片手で操作する場合を考えたら確かにそのとおりである。
http://d.hatena.ne.jp/leg-end/20100130/1264862848
この情報によると、Hybrid W-ZERO3 でロック画面のデザインを司っているのは
「LS_LockScene_480x854.cpr」というXMLファイルらしい。
とりあえずパソコンにこのファイルをコピーし、エディタで見てみた。
頭の方に
<Slider ID="LockSlider" Top="6" Left="48" Width="384" Height="80" Orientation="Middle" OnPress="ShowNotifications" OnSlideLeftFinal="Unlock" OnSlideRightFinal="Unlock" >
と書いてある。
・・・・「OnPress="Unlock"」にしたら、スライドさせなくてもタップだけでよくなるんじゃね?
さっそく書き換える。必要かどうかはわからないがついでに「LS_LockScene_480x854_cust_fe.cpr」も書き換えた。
HWZ3 の元のファイルを上書きするのに苦労したが、、(少なくとも、一旦 HWZ3内に複写しておき、その後コピー&ペーストで上書きする必要があるようである。最終的にどうやったか正確には憶えていない)置き換えるとタップだけでパスワード入力画面に遷移するようになった。
とりあえず、かなり快適になった。ロック画面の文字列(「スライドしてください」)が実際と異なることは無視するとして。
子供手当の矛盾
外国に(本当に居るかどうかはわからない)子供がいる親に金を払い、
国内の、親がわからない子供の分は払われない。
あぁ、悔しいね。
====
3/27 追記
「国内の、親がわからない子供の分は払われない。」方はどうやら修正されたらしい。無駄に金をばらまくのが得意な政党の成果。
でも、金が余計にかかるわけで。
外国に(本当に居るかどうかはわからない)子供がいる親に金を払い、
国内の、親がわからない子供の分は払われない。
あぁ、悔しいね。
====
3/27 追記
「国内の、親がわからない子供の分は払われない。」方はどうやら修正されたらしい。無駄に金をばらまくのが得意な政党の成果。
でも、金が余計にかかるわけで。
アクセスログを見ていたら
「アドエス テンキー 空白」「Hybrid W-ZERO3 空白」で
http://10395.diarynote.jp/201002032309317755/
を検索してきている人がいた。
僕はテンキーで入力するときは英字入力に切り替えてから空白を入力していた。
アドエスの時も、Hybrid W-ZERO3 (HWZ3) の当初も。
たまたま HWZ3のマニュアルが手元にあったので調べてみた。
・・・。知らなかった。
たまたま手元にある アドエス(SIM抜き去り済み)でも試してみる。
・・・・空白が入力できた!。
アドエスを使い始めて2年半、いやそれ以前の携帯電話・PHS でもそうだったかもしれない。
だって、キーに書いていないもんねぇ・・・・・。
ぼくだけじゃないもんねぇ・・・・。
「アドエス テンキー 空白」「Hybrid W-ZERO3 空白」で
http://10395.diarynote.jp/201002032309317755/
を検索してきている人がいた。
僕はテンキーで入力するときは英字入力に切り替えてから空白を入力していた。
アドエスの時も、Hybrid W-ZERO3 (HWZ3) の当初も。
たまたま HWZ3のマニュアルが手元にあったので調べてみた。
キー0 わをん□(スペース)
・・・。知らなかった。
たまたま手元にある アドエス(SIM抜き去り済み)でも試してみる。
・・・・空白が入力できた!。
アドエスを使い始めて2年半、いやそれ以前の携帯電話・PHS でもそうだったかもしれない。
だって、キーに書いていないもんねぇ・・・・・。
ぼくだけじゃないもんねぇ・・・・。