何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 37042
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

メールにて、質問をいただきました。タイトルのように、・・・あれ?逆だ。ブラウザのサイズ変更にコントロールを追従させる、だ。


私も知りません。


ではつまらないので、調べます。

まず、ドキュメント。CHM なドキュメントには、クラス ライブラリの説明だけでなく、技術背景なども書かれています。目次でいうと、「Silverlight の概要」「はじめに」のあたりです。このあたりは、時間を作って一度目を通しておくことを勧めます。で、「ビジュアル デザイン」→「Silverlight のレイアウト システム」のあたりが該当しそうです。読んでいくと、「全画面表示サポート」の中に、Content.ActualWidth プロパティへの参照があります。これっぽいです。

で、「Content.ActualWidth プロパティ」の説明を読んでいくと、表示が完了した直後に Resized イベントが発生し、それ以降に ActualWidth プロパティで現在の実際の横幅が取れるとあります。

じゃぁ、ってんで、Resized イベントのハンドラを追加してみます。すると、Page クラスについては SizeChanged イベントが発生するようです。なので、こっちをハンドルします。すると、SizeChangedEventArgs クラスが引数として付いてきます。この中の NewSize プロパティと PreviousSize プロパティで、変更前後の…書く順番間違えているけど…サイズが参照できます。なので、これを表示させます。


SizeChanged イベントが、一度しか発生しません。


どうも、Silverlight plug-in を呼び出している object 要素に指定した width, height 属性のために、サイズが変化しないようです。ですから、このサイズの指定を絶対値からパーセンテージに変更してみます。


やはり、一度しか発生しません。


よく見ると、Page.xaml に Width, Height プロパティを指定しています。これの説明を見ると、"Auto" という値も指定できるということです。なので、"Auto" にしてみます。

デザイナからコントロールが消えます。。。

ん。。。まぁ、そうかも、しれない、ね。。。とりあえず、これでやってみよう。

無事、サイズの変更がわかりました。つまり、ブラウザのサイズ変更に object 要素が追従し、object 要素の変更に Silverlight アプリケーションも追従するようになりました。

しかし、これではデザインに支障が出ます。どうしましょう?手っ取り早いのは、オブジェクト生成の時に "Auto" を指定することですが、XAML には "Auto" と記述できますが(シリアル化解除で適切に変換してくれているのだろう)、Double に対して "Auto" という文字列は指定できません。困った。つらつら眺めていると、Height および Width の既定値は、0 ではなく Double.NaN です。と書いてあります。これにしてみましょう。まず、Page.xaml の Width, Height に適当な数値を設定します。コンストラクタの InitializeComponent() 呼び出しの後、this.Width = double.NaN; と、this.Height = double.NaN; を追加します。そして実行。


うまくいきました。

やっぱり、読むならちゃんと読む。斜め読みはいかんね。。。

投稿日時 : 2008年12月12日 23:14
コメント
タイトル
名前
Url
コメント