たこぜりー研究室

大腸菌DNAは4.64Mbp。酵母は13Mbpで、ヒトは3Gbp

スポンサーサイト

#
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DataGridCell のフォーカス表示を無くす

#546


Silverlight の DataGrid では選択したセルに #66ffffff の Rectangle が表示されるようになっている。

だが IsReadOnly = true でもこのフォーカス要素が表示されるままなので、これを無くすことを試みた。

1. DataGrid.CellStyle プロパティに既定の DataGridCell 用のスタイルを突っ込む。
2. Template setter のみ残す
3. x:Name が CurrentStates の VisualStateGroup を削除
4. Name が FocusVisual の Rectangle を削除。
スポンサーサイト

Silverlight 3 Tools きたかな

#510

そろそろ Silverlight 3 にするか

#509
マイクロソフト、2010 年度の経営方針を発表-Windows 7 で業界全体を活性化 [Enterprise Watch]

↑を見ると「Silverlight 3 の提供開始 (7 月)」とあるので、そろそろ試すかと思ったら、Visual Studio 2008 ではまだマルチターゲティングができない、とのことだった。
どうすっかな。試したいことは色々あるんだが。

Silverlight 2 のローカライゼーション #4

#503
前回 : Silverlight 2 のローカライゼーション #3

えらく放置していたがこれで手を打った。

まず、新しい Silverlight アプリケーションのプロジェクトを作成。
ホストするサイトに追加する。

Resources.ja.resx をそのプロジェクトに移動。
App.xaml とか既定のアイテムはほとんど削除。
参照設定も mscorlib のみ。
当然 [assembly: AssemblyCulture("ja")] 。

配置の方法は 2 つあって、

1. サイト側で「構成固有のフォルダへのコピー」を有効にする。そして、xap を置いておきたいフォルダ名を構成名にする。
2. Silverlight ビルドオプションで xap ファイル名を変える。

で自動化。

読み込みは Startup イベント時に
private void OnStartup(object sender, StartupEventArgs e)
{
  WebClient wc = new WebClient();
  wc.OpenReadCompleted += OnStartupAfter;
  wc.OpenReadAsync(
    new Uri("ja/App.xap", UriKind.Relative));
}

private void OnStartupAfter(object sender,
  OpenReadCompletedEventArgs e)
{
  if (e.Error == null && !e.Cancelled)
  {
    StreamResourceInfo xap = new StreamResourceInfo(
      e.Result, "application/x-silverlight-app");
    StreamResourceInfo dll =
      Application.GetResourceStream(xap,
      new Uri("ja/App.resources.dll", UriKind.Relative));

    AssemblyPart part = new AssemblyPart();
    part.Load(dll.Stream);
  }
  this.RootVisual = new Page();
}

これで東アジア言語をサポートしていない環境でも動いてくれる。

IE8 上での Silverlight 2

#500
HTML で Silverlight 2 をホストしているんだが、IE8 でみると・・・

Silverlight object の下に謎のスペース

なんだこの下のスペースは。
互換表示にすると消えるので、IE8 だけで発生する模様。

そこでさっそく新機能の開発者ツールを使う。
すると IE8 モードだと

 html: 842 x 532
 body: 838 x 528
 div: 821 x 528
 object: 821 x 528

だが、互換表示だとすべて 838 x 528 になっていることがわかった。つまり、html がなぜか 4 x 4 だけ太っているようだ。div が細くなっているのはたぶんスクロールバーの分。

上の画像だと 4px 以上の高さがあるように見えるが、Safari 対策用の iframe のスタイルに { display: none; } を加えると、スペースは小さくなって高さ 4px になる。なおこの iframe 、IE8 モードだと 5 x 532 のサイズになっている辺りが謎 (width と height は 0 に指定してあるのに) 。

ひとまず html, body { overflow: hidden; } にして回避することにする。

Silverlight 3 に期待

#499
SaveFileDialog きたー
DataForm すげぇ
待望の Binding.ElementName プロパティ
Out of browser application はまだちょっとわかんないな。サーバー上に置いてある画像とか、複数に分かれてる xap とかはどうなるんだ?

Silverlight で Binding

#485
Sivelight 2 でバインディングがなかなかうまくいかないなぁと思っていたら、バインディングソースに internal class を使っていたのがまずかったようだ。
public じゃないと CLR プロパティを見つけられない、というかセキュリティにひっかかるらしい。

参考までに WPF の場合。
バインディング ソースの概要 [MSDN Library]

Silverlight 2 のローカライゼーション #3

#484
前回 : Silverlight 2 のローカライゼーション #2

前回から変わって Silverlight 2 も Tools も正式版になった。

プロジェクトを新規作成でやり直してみると、色々変わっていた。

・いつの間にか csproj に <SupportedCulture>ja</SupportedCulture> 追加
・xap 内に ja フォルダ生成
 (手動コピーしなくていいのは楽だ。xap のファイルサイズが大きくなるのは気になるが)
・XP (en) で動かすと 2105 error で停止
 (AppManifest.xml に ja 関係のアセンブリを列挙しているからと思われる)

2 つ目は SupportedCulture が記述されたから、であって RC0 からではない気がする。
しかし 3 つ目が謎。

Beta 2 時点では
手動で xap -> zip にリネーム -> ja フォルダコピー -> xap に戻す
で ja でも en でも動いていたんだけどなぁ。
ちなみに en は VPC (ry

現在では、
xap -> zip にリネーム -> 展開 -> 何もせず再圧縮 -> 元とサイズが違う ( ゜д゜)

さらに、Vista (en) ではちゃんと動いてくれていたりする。
日本語フォントが入ってないからかとも思ったがそうでもないようだ。
(Neutral は en-US にしてるし、それはそれで変な気がするが)

で XP と Vista で違っていたのは地域オプション。XP では Japanease (Japan) がない。
実際、new CultureInfo("ja-JP") は例外が発生する。
ここら辺が関係していそうだが・・・もはやお手上げ、腹減った

ja の *.resources.dll を読んだ時点で内部で ja の CultureInfo を生成してんのかな・・・

Siverlight 2 の ScrollViewer で複数ページ切り替え

#482
まずはここ。

develop .net : webcast: Silverlight 2 で複数のページを切り替える [develop.net]

次にここ。

Improved Mouse Wheel Support for Silverlight 2 Beta 2 ScrollViewer [adamjcooper.com/blog]

以上を材料に、マウススクロール可能でかつ複数ページに切り替えるものを Silverlight 2 Beta 2 で作成する。こんなイメージ。

<Grid><ScrollViewer /></Grid>

Grid を App.RootVisual にして、ScrollViewerMouseWheelSupport を呼び出す。
Grid を挟んでいるのはダイアログっぽいのを前面に表示できるようにするためと、ScrollViewer がシールされているため。いや、後者はコードで書けばいいのか。だがまあいいや。

そんなでやってみると、問題発生。

細かい再現条件は不明だが、ページ切り替え後にスクロール & (ブラウザのサイズを変える | ページ移動をする) と、必ず落ちる。

CrossAppDomainMarshaledException

Mouse Wheel Support のせいかと最初は思ったが、コメントアウトすると関係ないことが判明。いろいろやってみると、ScrollViewer.Content に直接各ページを叩きこんでいたのが原因らしい。
なので、

<Grid><ScrollViewer><ContentPresenter /></ScrollViewer></Grid>

にして、ContentPresenter.Content にページを入れるようにしたら、エラー消滅。

Silverlight でアプリケーション設定

#480
Google さんで「wpf isolatedstorage」をたまたま検索したら、IsolatedStorageSettings クラス (System.IO.IsolatedStorage) がヒットした。

おぉ、IsolatedStorageFileSettingsProvider とか自作しなくてもあったか、と思ったらこれは Silverlight 用のライブラリだった orz

XBAP 用にも作ってくれぇ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。