DataTemplate的XAML ControlTemplate触发器失败

时间:2017-02-18 19:24:16

标签: wpf xaml

我想基于IsDropDownOpen显示不同的组合框图像。不确定如何正确访问'imgArrow'。

wmic

上面代码中的粗体触发器失败。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

ControlTemplate触发器无法在Image的{​​{1}}中找到ContentTemplate元素,但您可以应用ContentPresenter直接转到Style元素本身并从Image移除IsDropDownOpen个触发器:

ControlTemplate

答案 1 :(得分:0)

场景中,您应该使用DataTrigger

<DataTemplate>
    <Grid>
        <TextBlock Text="{Binding}" />
        <Image x:Name="imgArrow"
               Source="{DynamicResource ComboBoxArrowNormalImage}"
               RenderOptions.BitmapScalingMode="HighQuality" />
    </Grid>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}, Path=IsDropDownOpen}"
                     Value="True">
            <Setter TargetName="imgArrow"
                    Property="Source"
                    Value="{DynamicResource ComboBoxArrowHoverImage}" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

但是,我无法理解您将图像放在ContentPresenter中的DataTemplate中的原因。我不确定这是造型的正确方式

如果您想要更改图片的来源,而IsDropDownOpenTrue,则一种方法是将所有内容都设为Grid

<Grid >
    <ContentPresenter />
    <Image />
    <ToggleButton />
    <Popup/>
</Grid>

并设置BackGroundTrigger属性。