日付をいろんな書式で表示したい。(弐)

日付をいろんな書式で表示したい。の続き。実装方針を元にコードを書いていく。
○指定の書式で表示できるようにするための依存関係プロパティを追加する。
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;

namespace TawamureDays.Controls {

/// <summary>
/// Description of DatePickerEx.
/// </summary>
public class DatePickerEx : DatePicker {

/// <summary>カスタム日付書式</summary>
public static readonly DependencyProperty CustomDateFormatProperty =
DependencyProperty.Register("CustomDateFormat", typeof(string),
typeof(DatePickerEx),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.SubPropertiesDoNotAffectRender));

/// <summary>
/// カスタム日付書式を取得|設定します。
/// </summary>
public string CustomDateFormat {
get { return (string)GetValue(CustomDateFormatProperty); }
set { SetValue(CustomDateFormatProperty, value); }
}
}
}
CustomDateFormatプロパティは文字列なので、基本なんでもありとなる。本当に日付に変換できるかは、表示時に評価してもいいし、評価用のメソッドを使うという手もある。
/// <summary>カスタム日付書式</summary>
public static readonly DependencyProperty CustomDateFormatProperty =
DependencyProperty.Register("CustomDateFormat", typeof(string),
typeof(DatePickerEx),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.SubPropertiesDoNotAffectRender,
null,
new CoerceValueCallback(CoerceCustomDateFormatPropertyValue)));

/// <summary>
/// プロパティ値評価用メソッド
/// </summary>
/// <param name="dpObj">依存関係システム関連オブジェクト</param>
/// <param name="value">評価対象の値</param>
/// <returns>評価後の値</returns>
private static object CoerceCustomDateFormatPropertyValue(DependencyObject dpObj, object value) {

var dateFormat = Utils.ToString(value);

if (string.IsNullOrEmpty(dateFormat)) {
return value;
}

try {
var result = DateTime.Now.ToString(dateFormat);

//書式そのものが返される=日付書式としては不適切
if (result == dateFormat) {
return string.Empty;
}

} catch {
return string.Empty;
}

return value;
}

○フォーカスが外れた時、カレンダー等で選択日付が変更されたら指定の書式に変える。
○フォーカスが当たった時は、編集しやすい書式が望ましい。
カスタムな書式をいつ表示するかと言えば、「編集時以外」と言える。編集時はむしろ邪魔臭い。主には、
 ・編集するためにフォーカスが当たった時は、編集用の書式に戻す。
 ・編集が終わってフォーカスが外れた時は、カスタム書式で表示する。
 ・カレンダーを表示して選択された時もカスタム書式で表示する。
となる。これらを実装する為に、各イベントへリスナ用メソッドを登録する。
長くなりそうなので、続く。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m