2017-05-08 18 views
-1

私は既にいくつかの質問があることを知っていますが、私はそれらの問題を解決できません。データテンプレートを使用して画像を切り替える

問題:データテンプレートを使用してイメージを変更しようとしましたが、デフォルトイメージだけが表示されます。

コード:私の背後にあるコードで

<Window.Resources> 
    <DataTemplate x:Key="MultiTemplate"> 
     <Image Height="17" Width="17"> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Start.svg}"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding MultiTrigger}" Value="start"> 
          <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Start.svg}"/> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding MultiTrigger}" Value="stop"> 
          <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Stop.svg}"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
    </DataTemplate> 
</Window.Resources> 

<ContentControl ContentTemplate="{DynamicResource MultiTemplate}"/> 

MultiTriggerは= "開始" または "停止" に設定します。 私のXAMLコードこのようなものです。

質問:コンテンツコントロールで画像を表示できますか?それとも、私はデータテンプレートで何かばかげたことをしますか?

編集:

public string MultiTrigger 
    { 
     get { return _multiTrigger; } 
     set 
     { 
      _multiTrigger = value; 
      RaisePropertyChanged(); 
     } 
    } 
+1

ContentControlのDataContextは、MultiTriggerプロパティを持つオブジェクトに設定する必要があります。 MultiTriggerプロパティ設定ツールは、PropertyChangedイベントを発生させる必要があります。 – Clemens

+0

... 'MultiTrigger'がウィンドウクラスのプロパティであれば、' RelativeSource = {RelativeSource AncestorType = Window} 'を使ってバインドする必要があります。 –

+0

それに加えて、実際にはDataTemplateでContentControlは必要ありません。画像スタイルをリソースとしてImageコントロールに直接適用することもできます。 – Clemens

答えて

0

が(。どのところで奇妙なプロパティ名である)MultiTrigger性質を持つMainViewModelクラスがあると仮定すると、あなたは、メインウィンドウのDataContextにビューモデルクラスのインスタンスを割り当てます、いずれかの背後にあるコードで:

public MainWindow() 
{ 
    InitializeComponent(); 
    DataContext = new MainViewModel(); 
} 

またはXAMLで:

<Window.DataContext> 
    <local:MainViewModel/> 
</Window.DataContext> 

はその後、リソースとしてイメージのスタイルを宣言します:

<Window.Resources> 
    <Style TargetType="Image" x:Key="ImageStyle"> 
     <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Start.svg}"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding MultiTrigger}" Value="stop"> 
       <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Stop.svg}"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

とImageコントロールに適用します:

<Image Style="{StaticResource ImageStyle}"/> 

が続いて直接アクセスすることにより、背後にあるメインウィンドウのコードのどこかでプロパティ値を変更します

((MainViewModel)DataContext).MultiTrigger = "stop"; 
関連する問題