メモの日々


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より。

[life] 自社株

株の配当金が通知され、637円の配当、うち128円税金で引かれている。配当金で生きることは不可能のようだ。


2005年01月24日(月)

[howto] cvs tag

cvsのtagコマンドを使うときは -c オプションを付けた方がよさそう。付けると、コミットしていない作業ファイルがあった場合に教えてもらえる。

[unix] 「意外と速い! Windows上でそのまま起動できるcoLinux」 (ITmedia)

UNIX USER誌に載っていたcoLinuxの記事が読めるようになっていたのでメモ。

やること

  • リンク元のスリム化
  • ナンバーアナウンス解約
  • tDiaryバージョンアップ
  • FSWikiバージョンアップ
  • オーブンレンジ用べんり棚
  • 確定申告書作成

2008年01月24日(木)

  • 仕事は、プログラミングすることを諦め仕様の調整に専念することにして、楽にはなった。全く面白くないのだけれど。
  • でもなあ。ちゃんと納品に間に合うのだろうか。

[life] 引越し先の契約をした

やっと契約にこぎつけた。家賃6ヶ月分相当の大金を持ち歩いたので緊張した。

でも、実はまだ家主側が契約書にサインしていないので、契約完了ではないのだ。この後ひっくり返ることはないはずだけれど。不動産屋の手際が悪いんだと思っている。いい人なんだけどな。

んで、やること山積み。

やること

  • 火災保険の申し込み
  • 電気の手続き
  • ガスの手続き
  • 水道の手続き
  • 電話の手続き
  • プロバイダの手続き
  • 照明機器の購入
  • PC用ディスプレイの処分
  • 粗大ゴミの券の購入
  • 引越し屋に一報
  • こっちの不動産屋に一報
  • 新聞屋へ連絡
  • 牛乳を買う

まだまだある


2022年01月24日(月)

[c#] XAMLの添付プロパティ

依存関係プロパティと似たものに添付プロパティがある。

ここに

添付プロパティは 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が同じプロパティを複数登録することはできない(コンパイルはできるが実行時にエラーになる)ので、衝突を防ぐために自クラスの型を指定すべきなのだと思う。