0

アプリケーション内のさまざまな種類の子ウィンドウのスタイルを定義するリソース ファイルを持つ Silverlight アプリケーションで作業しています。には、さまざまなコンテンツのマークアップが<Style>含まれています。子ウィンドウのクラスから<ControlTemplate>定義されたコントロールのプロパティの 1 つを設定する方法はありますか?<ControlTemplate>

たとえば、リソース ファイルに次のようなマークアップがあるとします。

<Style x:Key="MyChildWindowStyle" TargetType="sdk:ChildWindow">
  <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="sdk:ChildWindow">
           <Grid x:Name="Root">
              ...
              <Image Source="/Assets/image.png" />
              ...
           </Grid>
        </ContentTemplate>
   </Setter>
</Style>

ここで、このスタイルを使用するように構成された多数の子ウィンドウがあるとします。私ができるようにしたいのは、それらの子ウィンドウのコードから、プログラムで画像の値を変更できるようにすることSourceです。

これは可能ですか?

ありがとう

4

2 に答える 2

0

リソースでこれを行うことができます:

<BitmapImage x:Key="MyImage" Source="/Assets/image.png"/>

<Style x:Key="MyChildWindowStyle" TargetType="sdk:ChildWindow">
    ...
    <Image Source="{DynamicResource MyImage}" />
    ...
</Style>

次に、子ウィンドウのコード ビハインドでこれを行うことができます。

Resources["MyImage"] = new BitmapImage(new Uri("/Assets/other-image.png"));

ただし、子ウィンドウ クラスが別のアセンブリにある場合は、URI を少し異なる方法で記述する必要があります。

Resources["MyImage"] = new BitmapImage(new Uri("pack://application:,,,/MyOtherAssemblyShortName;component/Assets/other-image.png"));

パッケージの uri 形式については、msdn ページを確認できます。

ただし、バインドやスタイリングなどの点で WPF を最大限に活用するために、MVVM パターンを使用することをお勧めします。コード ビハインドの代わりにビュー モデルを使用すると、これらがより簡単になります。関連するmsdn ページcodeproject サンプルツールキット、またはMVVM 用に設計された検証メカニズムを確認したい場合があります。

于 2012-10-09T16:41:25.247 に答える
0

@zahirの回答は正しい方向を示してくれましたが、Silverlightで機能させるには、次のことを行う必要がありました。

まず、プロパティを使用して既定値を指定<BitmapImage>し、リソース ファイルにマークアップを追加しました。UriSource

<BitmapImage x:Key="MyImage" UriSource="../Assets/DefaultImage.png" />

次に、次の<ControlTemplate>ように参照しました。

<Image ... Source="{StaticResource MyImage}"/>

次に、コード ビハインド クラスで、次のUriSourceようにプロパティを変更できました。

BitmapImage img = (Application.Current.Resources["MyImage"] as BitmapImage);
if (img != null)
    img.UriSource = "../Assets/NewImage.png";

もちろん、 の正確な値は、UriSource画像アセットの処理方法や配置場所などによって異なります。

于 2012-10-09T23:40:41.323 に答える