无法在Menuitem.icon图像绑定上触发DataTrigger

时间:2015-10-28 05:52:29

标签: wpf data-binding binding datatrigger

我正在尝试创建一个通用模板,我可以使用绑定父属性来设置几个属性。

这是代码:

#include "Gradebook.h"
#include "Source1.h"

//function main begins program execution
int main()
{
    //two-dimensional array of student grades
    int gradesArray[ GradeBook::students][GradeBook::tests] =
    {
        {87, 96, 70},
        {68, 87, 90},
        {94, 100, 90},
        {100, 81, 82},
        {83, 65, 85},
        {78, 87, 65},
        {85, 75, 83},
        {91, 94, 100},
        {76, 72, 84},
        {87, 93, 73}
    }

GradeBook myGradebook("CS101 Introduction to C++ Programming", gradesArray);
myGradeBook.displayMessage();
myGradeBook.processGrades();
} //end main

我面临的问题是,当MenuItem的IsEnable属性设置为false时,未触发代码。

<MenuItem Header="Item 1 "
          IsEnabled="false">
            <MenuItem.Icon>
                            <Image Source="{StaticResource MyImage}" Width="20" >
                                <Image.Style>
                                    <Style TargetType="Image">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem, AncestorLevel=2}, Path=IsEnabled}"  Value="false">
                                                <Setter Property="Effect" Value="{StaticResource GrayScaleEffect}"/>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem, AncestorLevel=2}, Path=IsEnabled}"  Value="true">
                                                <Setter Property="Effect" Value="{x:Null}"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Image.Style>
                            </Image>
            </MenuItem.Icon>
          </MenuItem>

我也尝试过TemplatedParent,TemplateBinding,但没有一个有效。我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:0)

问题是AncestorLevel值错误,您应该将其更改为1。 AncestorLevel参数是可选参数,如果您没有更高级别的其他MenuItem个对象,则可以将其删除。

答案 1 :(得分:0)

这是适用于我的解决方案:

<Style x:Key="GrayScaleStyle" TargetType="Image">
<Style.Triggers>
    <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self }}" Value="true">
        <Setter Property="Image.Effect" Value="{StaticResource GrayscaleEffect}"/>
        <Setter Property="Opacity" Value="0.1"/>
    </DataTrigger>
</Style.Triggers>

<MenuItem Header="Grayout effect" IsEnabled="False" >
<MenuItem.Icon>
    <Image Source="{StaticResource MyImage}" Width="20" IsEnabled="{Binding Path=., RelativeSource={RelativeSource TemplatedParent}}"  Style="{StaticResource GrayScaleStyle}"/>
</MenuItem.Icon>