我正在尝试创建一个通用模板,我可以使用绑定父属性来设置几个属性。
这是代码:
#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,但没有一个有效。我将不胜感激任何帮助。
答案 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>