Hatena::ブログ(Diary)

当面C#と.NETな記録 このページをアンテナに追加 RSSフィード

2010/7/5 (月)

[] ToolTip の Binding で StringFormat を使う方法  ToolTip の Binding で StringFormat を使う方法 - 当面C#と.NETな記録 を含むブックマーク  ToolTip の Binding で StringFormat を使う方法 - 当面C#と.NETな記録 のブックマークコメント

ToolTip の Binding で StringFormat は無効なようです。使おうとして↓のように書いても at の文字は表示されません。StringFormat は無視され、Hoge の数だけが表示されます。

<TextBlock Text="{Binding Value, StringFormat={}{0:N0}}"
  ToolTip="{Binding Hoge, StringFormat={}at {0:N0}}" />

StringFormat の代わりに ContentStringFormat を使って↓のように書くと期待通りに表示されます。

<TextBlock Text="{Binding Value, StringFormat={}{0:N0}}">
  <TextBlock.ToolTip>
    <ToolTip Content="{Binding Hoge}"
      ContentStringFormat="{}at {0:N0}" />
  </TextBlock.ToolTip>
</TextBlock>

# いちいち面倒ですよねぇ。DSL は変なこだわりを捨てて便利さを追求するべき!

関連:

2009/11/4 (水)

[] WPF を使ったブラウザ  WPF を使ったブラウザ - 当面C#と.NETな記録 を含むブックマーク  WPF を使ったブラウザ - 当面C#と.NETな記録 のブックマークコメント

f:id:siokoshou:20091104221105j:image

実用性はないけどおもしろいw

こんなにゆがんでてもスクロールできるし、クリックもできる。Chromium を利用しているっぽい。よく読んでないのでよくわかってないんだけど。ClickOnce でインストールできますが、サーバーが遅いのかものすごーく時間がかかるのでご注意を。5年後のインターネットはブラウザの四角い枠がなくなってるかもね。

via http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/

こちらにソースもあります。

3Dバージョンもあった(^^;



(追記) そんなものよりこれがおもしろかった。クリックが止まらないw

Silverlight。2D 物理エンジンなのかな。プルプルムニムニモフモフ

2009/10/29 (木)

[] WPF のカルチャー  WPF のカルチャー - 当面C#と.NETな記録 を含むブックマーク  WPF のカルチャー - 当面C#と.NETな記録 のブックマークコメント

f:id:siokoshou:20091029201453j:image

WPF で以下の XAML を書いて実行すると、日付と時刻が「10/29/2009 7:56:33 PM」と en-US カルチャーで表示されてしまいます。

<Window x:Class="LangTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="LangTest"
    SizeToContent="WidthAndHeight">
    <TextBlock Margin="30"
        Text="{Binding Source={x:Static sys:DateTime.Now}}"/>
</Window>

これを「2009/10/29 19:56:33」のように ja-JP カルチャーで表示するには、App クラスの OnStartup をオーバーライドしてカルチャーを指定すれば OK です。

protected override void OnStartup( StartupEventArgs e )
{
    FrameworkElement.LanguageProperty.OverrideMetadata(
      typeof( FrameworkElement ),
        new FrameworkPropertyMetadata(
          XmlLanguage.GetLanguage( CultureInfo.CurrentCulture.IetfLanguageTag ) ) );

    base.OnStartup( e );
}

ほかにも XAML で xml:lang="ja-JP" を付ける、Language="ja-JP" を付けるなどの方法もあります。

そして、これはバグではなくデザインだそうです。以下の connect にあります。

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=442569

回答はとても興味深いもので、従来の .NET の国際化まわりのチェックをしなかったのはよくなかったと考えており、きちんと明示させる方向を選んだそうです。FxCop はこのあたりをうるさく指摘しますよね。WPF のこの仕組みにより、デザイナー(美術さんじゃなくアプリデザイナーのことだと思います)がきちんとカルチャーについて考えるようにしむけたいようです。

まあ、でも、ネットを見るとこの問題は FAQ で、上のコードを書けという答えばかりで、カルチャーを意識させるのは失敗しているようです…(^^;

id:siokoshou:20090310 に書いた Binding チートシートの最後にもこのコードだけが載ってます。

2009/10/27 (火)

[] WPF と BackgroundWorker  WPF と BackgroundWorker - 当面C#と.NETな記録 を含むブックマーク  WPF と BackgroundWorker - 当面C#と.NETな記録 のブックマークコメント

WPF で BackgroundWorker は使ってもいいのかな?と調べてみました。結果は OK です。

BackgroundWorker 内部で使っている SynchronizationContext は WPF 用の新しい派生クラスが使われています。

  • WinForm … System.Windows.Forms.WindowsFormsSynchronizationContext
  • WPF … System.Windows.Threading.DispatcherSynchronizationContext

そして、とても良い記事がありました。後半のちゃぶ台返しに注目。

http://msdn.microsoft.com/ja-jp/magazine/cc163328.aspx

WPF は System.ComponentModel を無視しようとしているように見えるので気になったのでした。

gushwellgushwell 2009/10/27 21:49 Dispatcher を使用するのが、WPFの流儀かと思ってました。

BackgroundWorkerが使えるとなると、慣れているBackgroundWorkerのほうがいいですね。

siokoshousiokoshou 2009/10/28 08:49 BackgroundWorker 便利ですよね。
DispatcherSynchronizationContext で UI スレッドに処理を Post する部分は結局 Dispatcher.BeginInvoke してます。

以下脱線ですが、どーして BackgroundWorker が便利なのか考えてみたんですが、これって Template Method パターンですね!見た目はだいぶかけ離れてますケド。
UI の裏で長時間掛かる処理、キャンセルできる、というよくある処理をカプセル化して、スレッドのスイッチはライブラリ側で面倒を見た上で、残りの「裏でやる処理、UI での経過報告、UI での事後処理」をきれいに分けて穴埋めさせてます。
見た目は Template Method パターンとだいぶ違いますが、お手本にしたいほど上手な Template Method パターンの使い方だなーと気づきました。

gushwellgushwell 2009/10/28 21:27 継承使うだけが、Template Method パターンじゃないってことですね。
たしかに、これも、りっぱなTemplate Method パターンですね。

2009/9/29 (火)

[] 「基本要素の概要」の図  「基本要素の概要」の図 - 当面C#と.NETな記録 を含むブックマーク  「基本要素の概要」の図 - 当面C#と.NETな記録 のブックマークコメント

f:id:siokoshou:20090929150512j:image

http://msdn.microsoft.com/ja-jp/library/ms743618.aspx

この MSDN ライブラリの記事に欠けている図を勝手に描いてみた。

クラス名に出てくる Element は HTML の「要素」(タグと言われることのほうが多い)と思えばよい。

WPF は汎用性高すぎなせいか、カラクリを理解しないと使いこなせない面があるように思います。

2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 06 | 09 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 12 |
2009 | 01 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 07 |
2011 | 04 | 07 | 10 |
2012 | 04 | 12 |
2013 | 08 |
2014 | 03 | 08 |
2017 | 09 |