image DataTemplate inside a contentcontrol WPF

本文关键字:contentcontrol WPF inside DataTemplate image | 更新日期: 2023-09-27 18:30:13

我有一个DataTemplate

<DataTemplate x:Key="image">
  <Image x:Name="TheImage" />
     <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=OverallResult}">
                <DataTrigger.Value>
                    <local:resultType>Success</local:resultType>
                </DataTrigger.Value>
                <Setter TargetName="TheImage" Property="Source" Value="bin/Debug/Input/successx.jpg" />
            </DataTrigger>
 </DataTemplate>

带有一些触发器设置器,在GridView 中运行良好

  <ListView Margin="292,54,0,50" Name="listViewCaseSequence" MinHeight="215" Width="203" Button.Click="OnClick" ItemsSource="{Binding TestCaseSequenceList}" HorizontalAlignment="Left">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Result" CellTemplate="{StaticResource image}" Width="40"/>
      ...

现在我想在某种StackPanel中使用它。我已经发现我可以使用ContentControle

<StackPanel Orientation="Horizontal">
   <!-- doenst work --> <ContentControl ContentTemplate="{StaticResource image}" Content="{Binding OverallResult}" />
   <!-- works --> <TextBlock Text="{Binding OverallResult}" />
</StackPanel> 

TextBlock运行良好。但是我在ContentControle上遗漏了一些不让它渲染图像的东西?

指向正确读取源的指针也可以:)提前谢谢。

编辑:

 ...
 <DataTrigger Binding="{Binding}">
 ...
 <ContentControl ContentTemplate="{StaticResource image}" Content="{Binding OverallResult}"/>
 ...

输出显示:System.Windows.Data错误:40:BindingExpression路径错误:在"object"resultType(HashCode=0)"上找不到"OverallResult"属性。BindingExpression:Path=OverallResult;DataItem='resultType'(HashCode=0);目标元素是"ContentPresenter"(名称=");目标属性为"NoTarget"(类型为"Object")

但是为什么他发现>OverallResult<在有效的文本块上?

EDIT2:仍不工作

 ...
 <DataTrigger Binding="{Binding}">
 ...
 <ContentControl ContentTemplate="{StaticResource image}"/>
 ...

第3版:工作:

<DataTrigger Binding="{Binding Path=OverallResult}">
<ContentControl ContentTemplate="{StaticResource image}" Content="{Binding}"/>

image DataTemplate inside a contentcontrol WPF

这里的DataTemplate中的DataContext实际上是您为ContentControl设置的Content。因为它已经设置为{Binding OverallResult},所以DataTemplate内部的Binding应该只是{Binding},如下所示:

<DataTemplate x:Key="image">
   <Image x:Name="TheImage" />
   <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}">
            <DataTrigger.Value>
                <local:resultType>Success</local:resultType>
            </DataTrigger.Value>
            <Setter TargetName="TheImage" Property="Source" 
                    Value="bin/Debug/Input/successx.jpg" />
        </DataTrigger>
   </DataTemplate.Triggers>
 </DataTemplate>

当然,上述模板应仅用于StackPanel。对于ListView,只需使用旧的DataTemplate。

然而,我认为在这种情况下,您为ContentControl设置的Content可以只是{Binding},那么在这两种情况下(对于ListView和ContentControl)的DataContext应该是相同的,我们可以只使用一个DataTemplate:

<ContentControl ContentTemplate="{StaticResource image}" Content="{Binding}"/>