我有一个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:路径= OverallResult; DataItem ='resultType'(HashCode = 0); target元素是'ContentPresenter'(Name =''); target属性是'NoTarget'(类型'Object')
但为什么他会找到&gt; OverallResult&lt;在Textblock上有效吗?
EDIT2:仍无效
...
<DataTrigger Binding="{Binding}">
...
<ContentControl ContentTemplate="{StaticResource image}"/>
...
编辑3:工作:
<DataTrigger Binding="{Binding Path=OverallResult}">
<ContentControl ContentTemplate="{StaticResource image}" Content="{Binding}"/>
答案 0 :(得分:1)
此处DataContext
中的DataTemplate
实际上是您为Content
设置的ContentControl
。因为它已经设置为{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。
但是我认为在这种情况下为Content
设置的ContentControl
只能是{Binding}
,那么两种情况下的DataContext(对于ListView和ContentControl)应该是相同的,我们只能使用一个DataTemplate:
<ContentControl ContentTemplate="{StaticResource image}" Content="{Binding}"/>