2002年01月24日(木) サンドイッチの日
■ 会社
- 8:50 入館カードがない。おかしいな。
- 12:40 午前中はテレビカメラが回っていた。なぜだかは知らない。午後は加茂さんいらっしゃる。今日で最後。
- 14:15 やっと右側に国名が出たなり。おれはどうもメモリの扱いがいいかげんだ。strncopyの文字列長などがいつも間違えている。
- 18:35 ずっとOOOOに提供する課金データフォーマットを考えることに費やしてしまった。きりがいいのでやめてプログラミングに戻ろう。
- サイボウズコンタクトからKSへの移行方法の調査は浅海さんにお願いした。よろしくー。
■ [web] 安全なソフトウェアを作成する: 安全になった CGI プログラミング
CGIプログラム作成時の注意点。日経オープンシステムより。おととしの文書なので古い。
■ テレビ/本
- 日経オープンシステム読み終わり。特集以外はどうということはなかった。
- ホワイトアウト読み進めた。焚き火をしたり靴投げをしたり。
2003年01月24日(金)
■ 会社
- (13:00)出社。またまた半日休暇をとってしまった。
- お前って誰だろう。
- (14:20)メイルを読み終わり、扶養控除等申告書にシャチハタ印を押し提出。
- (〜17:50)細かい仕様変更やバグへの対応。まだ残バグあり。
■ [dev] OOエンジニアの輪 第 19 回 首藤 一幸 さんの巻
首藤さん登場。oosquare MLより。ハンサムや。
■ [java] Struts(ストラッツ)のススメ
いくつかサンプルプログラムを載せているようだ。struts-user MLより。
2005年01月24日(月)
■ やること
- リンク元のスリム化
- ナンバーアナウンス解約
- tDiaryバージョンアップ
- FSWikiバージョンアップ
- オーブンレンジ用べんり棚
- 確定申告書作成
2008年01月24日(木)
- 仕事は、プログラミングすることを諦め仕様の調整に専念することにして、楽にはなった。全く面白くないのだけれど。
- でもなあ。ちゃんと納品に間に合うのだろうか。
■ [life] 引越し先の契約をした
やっと契約にこぎつけた。家賃6ヶ月分相当の大金を持ち歩いたので緊張した。
でも、実はまだ家主側が契約書にサインしていないので、契約完了ではないのだ。この後ひっくり返ることはないはずだけれど。不動産屋の手際が悪いんだと思っている。いい人なんだけどな。
んで、やること山積み。
■ やること
- 火災保険の申し込み
- 電気の手続き
- ガスの手続き
- 水道の手続き
- 電話の手続き
- プロバイダの手続き
- 照明機器の購入
- PC用ディスプレイの処分
- 粗大ゴミの券の購入
- 引越し屋に一報
- こっちの不動産屋に一報
- 新聞屋へ連絡
- 牛乳を買う
まだまだある
2022年01月24日(月)
■ [c#] XAMLの添付プロパティ
依存関係プロパティと似たものに添付プロパティがある。
- 添付プロパティの概要 (WPF .NET) (docs.microsoft.com)
ここに
添付プロパティは XAML の概念であり、依存関係プロパティは WPF の概念です。
とある。なるほど? XAMLのドキュメントで添付プロパティに言及しているのはこの辺りだろうか。
添付プロパティの例
添付プロパティとは、次のようなXAML片の「local:Hello.Prop1」のことだ。
<Button x:Name="Button1" local:Hello.Prop1="こんにちは" />
Buttonオブジェクトに、元々は無いProp1というプロパティを「添付」しているということだろう。
このような添付プロパティは次のようなクラスを作れば使えるようになる。
public class Hello { public static string GetProp1(DependencyObject target) => "hello"; public static void SetProp1(DependencyObject target, string value) {} }
これで任意のDependencyObjectに対してXAML上でHello.Prop1をプロパティとして添付できるようになる。
ただし、上のHelloクラスは常に"hello"を返すだけなので、プロパティとしては不完全だ。
添付プロパティのDependencyPropertyを使った実装
WPFのDependencyPropertyは添付プロパティを実装するようにも設計されている。DependencyPropertyを使うことでバインディングなどにも対応できるようになる。
Helloクラスを次のように変更する。
public static class Hello { public static readonly DependencyProperty Prop1Property = DependencyProperty.RegisterAttached( "Prop1", typeof(string), typeof(Hello), new PropertyMetadata(defaultValue: "hello")); public static string GetProp1(DependencyObject target) => (string)target.GetValue(Prop1Property); public static void SetProp1(DependencyObject target, string value) => target.SetValue(Prop1Property, value); }
こうすると、最初のXAML片にあるボタンを参照する変数button1に対し
button1.GetValue(Hello.Prop1Property)
が "こんにちは" を返すようになる。
- Helloクラスのインスタンスは不要なのでstaticクラスにした。
- 依存関係プロパティを実装する際にはDependencyProperty.Register()を使うが、添付プロパティを実装する際にはDependencyProperty.RegisterAttached()を使う。両者の違いはメタデータが引数のownerType以外の型に対しても作用するかどうか。DependencyProperty.Register() or .RegisterAttached()にある回答が参考になる。
- RegisterAttached()に指定するownerTypeは何でもいいような気がするが、nameとownerTypeが同じプロパティを複数登録することはできない(コンパイルはできるが実行時にエラーになる)ので、衝突を防ぐために自クラスの型を指定すべきなのだと思う。