2017-09-18 19 views
0

私はトリガーに依存するコンテンツ、「アイコンボックス」という名前のContentControlが含まれているカスタムButton持っている:スタイルを使用してイメージコンテンツをContentControlに動的に設定する方法は?

ICON1は ViewBoxとベクトルと ControlTemplateある
<DataTrigger Binding="{Binding Path=Flag}" Value="icon1"> 
<Setter TargetName="IconBox" Property="Visibility" Value="Visible"/> 
<Setter TargetName="IconBox" Property="Style" 
    Value="{DynamicResource icon1}"/> 
</DataTrigger> 

<Button> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type Button}"> 
         <Grid> 
          <!-- somethig here ..... --> 
          <ContentControl x:Name="IconBox" HorizontalAlignment="Center" 
                 VerticalAlignment="Center" 
               Visibility="Collapsed" /> 
         </Grid> 

         <ControlTemplate.Triggers> 
          <!-- triggers here --> 
         </ControlTemplate.Triggers> 
<!-- closing tags ... --> 
</Button> 

は、トリガーのほとんどは次のようになります内部の画像。 それは既に知られています。

新しいモデルのプロパティに含まれるビットマップイメージを追加する必要があります。これをImageとします。

だから私のような何かをしたい:

<DataTrigger Binding="{Binding Path=Flag}" Value="useImage"> 
<Setter TargetName="IconBox" Property="Visibility" Value="Visible"/> 
<Setter TargetName="IconBox" Property="Style" 
    Value="{DynamicResource ImageTemplate}"/> 
</DataTrigger> 

ImageTemplateどのようにしてのようになりますか?

私は、次のいずれかを試してみた:

<Style TargetType="ContentControl" x:Key="ImageTemplate"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <Viewbox> 
         <Image> 
          <Image.Source> 
           <Binding RelativeSource="{RelativeSource Self}" 
             Converter="{StaticResource ImagePathConverter}" 
             Path="Image"/> 
          </Image.Source> 
         </Image> 
        </Viewbox> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

しかし、それは動作しませんでした。どうして?

Imageは "image1.bmp" のように刺すが含まれており、ImagePathConverterは単にそれに完全なパスを追加します - "リソース\%CurrentDir%をimage1.bmp \" コンバータ内部の

ブレークポイントはヒットしません。 1つの内部まではImageゲッター。 そしてなぜ私は考えていません。テンプレートやトリガー内でエラーが発生する可能性がありますか?

CanvasViewBoxのトリガーは、正常に動作します。

実行時にこの要素のプロパティをチェックするためにVisualTreeを使用しているときに、ブレークポイントがImageゲッターヒット内にあります。

ImageBox内で画像をどのように実装できますか?

+0

がフラグプロパティと同じクラスで定義されたImageプロパティですか? – mm8

答えて

1

あなたがDataTemplateを定義する場合:

<DataTemplate x:Key="ImageTemplate"> 
    <Image Source="{Binding Image, Converter={StaticResource ImagePathConverter}}"/> 
</DataTemplate> 

を...あなたはこの1つにContentControlContentTemplateを設定できます

<DataTrigger Binding="{Binding Path=Flag}" Value="useImage"> 
    <Setter TargetName="IconBox" Property="Visibility" Value="Visible"/> 
    <Setter TargetName="IconBox" Property="ContentTemplate" Value="{DynamicResource ImageTemplate}"/> 
    <Setter TargetName="IconBox" Property="Content" Value="{Binding}"/> 
</DataTrigger> 

Contentプロパティはどこオブジェクトにバインドする必要がありますImageプロパティが定義されています。

はまた、あなたのコンバータがImageSourceなくstringを返す必要があることに注意してください:

"Cannot convert string to ImageSource." How can I do this?

関連する問題