画像を貼り付けてみようとしたら、勘違いに気づいた。

背景色にColor以外を設定してみた。の流れで、背景に画像を貼り付けてみようと思った。

1.プロジェクト直下に画像ファイルを配置し、プロジェクトに含める。
 ビルドアクションは「Resource」で。

2.App.xamlにリソースとして登録する。
<Application x:Class="TawamureDays.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<BitmapImage x:Key="WallPaper" UriSource="wallpaper.png"/>
</Application.Resources>
</Application>


3.Backgroundプロパティに設定する。
<Window x:Class="TawamureDays.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="418" Width="402">
<Grid Name="MainGrid">
<Grid.Background>
<ImageBrush ImageSource="{StaticResource WallPaper}"/>
</Grid.Background>
</Grid>
</Window>

リソースとして登録した情報を使う場合は、StaticResourceかDynamicResourceで利用できる。
実行↓
20120904_1

異なる型同士でバインディングさせたい時もある。の最後の方にも書いたんだけど、FreezableなリソースはFreezeしておいた方が良いってんで、
XAML上でフリーズさせる為の表記をここに書こうと思ったんだけど…。
上で設定したリソースさん達をコードビハインドで取得して、Freezeされてない事をまず確認して~とか考えてコードを記述した。
        /// <summary>
/// Loadedイベントハンドラ
/// </summary>
/// <param name="sender">イベント発生元</param>
/// <param name="e">イベント引数</param>
void MainWindow_Loaded(object sender, RoutedEventArgs e) {
var bkBrush = MainGrid.Background as ImageBrush;

if (bkBrush != null) {
var image = bkBrush.ImageSource;
var canFreeze = image.CanFreeze;
var frozen = image.IsFrozen;
}

var bitmap = Application.Current.FindResource("WallPaper") as BitmapImage;

if (bitmap != null) {
var canFreeze = bitmap.CanFreeze;
var frozen = bitmap.IsFrozen;
}

return;
}

そうしたら、なんと、既にFreezeされてる(IsFrozen = true)んだな、これがOrz。
なんてこったい。じゃあ、嬉しげに設定したやつ意味ないのかΣ(T◇T)って事に気づいた。
まあ、その仕様の方が、いちいち設定しなくてもパフォーマンスには良いので、設定を消せばいいだけなんだけど…。
ということは、自分でnewでもしない限りは、Freezeしてくれるのかもしれない。
さきに調べておけばなぁとちょっとへこんでしまった。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


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

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

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

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