スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

リソースを共有したくないんだ。

App.xamlやGeneric.xamlで宣言したImage等のインスタンスは、リソースとして扱われ、基本的に使いまわされる(共有される)。要するに、1つのインスタンスでやり繰りされようとする。それでは都合の悪いケースもあったりする。
例えば、ボタンを文字ではなく、画像で表示したい場合。
・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>
<Image x:Key="Search_Jpg" Source="search_btn.png"/>
</Application.Resources>
</Application>

プロジェクト直下に配置した画像(search_btn.png)をボタンに設定する。
<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="350" Width="525">
<Grid>
<StackPanel>
<Button Width="48">
<StaticResource ResourceKey="Search_Jpg"/>
</Button>
<Button Width="48">
<StaticResource ResourceKey="Search_Jpg"/>
</Button>
</StackPanel>
</Grid>
</Window>
デザイナ上で見る分にはOKなんだけど、実行時にはエラーとなる。

指定された要素は、既に別の要素の論理子です。まず接続を切断してください。


コントロールもオブジェクトも、複数のコントロールの子にはなれない感じ。
こういうときは、リソースを共有しないという設定にする。
<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>
<Image x:Key="Search_Jpg" x:Shared="False" Source="search_btn.png"/>
</Application.Resources>
</Application>

こうすると、実行できる。
20120922_1

次に、この画像を使ったボタンをスタイル化しようとした。
<Style TargetType="Button" x:Key="SearchBtnStyle">
<Setter Property="Content">
<Setter.Value>
<StaticResource ResourceKey="Search_Jpg"/>
</Setter.Value>
</Setter>
</Style>

1画面内で1つのボタンに適用した時は、問題なく使えるけど、上記のように、複数のボタンのスタイルに適用すると駄目だった。同じエラーを言われる。Styleではなく、ControlTemplateを使って、一から構築すれば可能なのかもしれないけど、仕事ではそこまではできなかった。
後、このx:Sharedって、コードヒントに出てこないんだよなぁ。なんでだろ。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


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

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

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

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

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