如果菜单项被禁用(只是一个灰色的版本),我会尝试显示一个不同的图像作为menuitem.icon。这是我尝试过的:
<tk:DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="_Divorce" Command="{Binding Path=DivorceCommand}">
<MenuItem.Icon>
<Image>
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType=MenuItem, AncestorLevel=3}}" Value="true">
<Setter Property="Image.Source" Value="eraser.ico" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType=MenuItem, AncestorLevel=3}}" Value="false"
<Setter Property="Image.Source" Value="eraser_grey.ico" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</tk:DataGrid.ContextMenu>
</tk:DataGrid>
错误消息:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.MenuItem', AncestorLevel='1''. BindingExpression:Path=IsEnabled; DataItem=null; target element is 'Image' (Name=''); target property is 'NoTarget' (type 'Object')
我当前的XAML数据触发器绑定出了什么问题?
感谢大家的帮助!
发布于 2011-07-07 18:43:01
您可以尝试执行以下操作:
添加像CubaLibre mentioned这样的触发器
而不是使用目标名称,这是行不通的。使用以下代码。
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Image">
<Setter.Value>
<Image Source="eraser_grey.ico"/>
</Setter.Value>
</Setter>
</Trigger>
如果这不起作用(对不起,目前我不能亲自测试它)。你也可以用一种很难的方式来做:
为menuitem创建一个样式,您现在可以完全复制所需角色模板的控件模板中的original style,只需在ControlTemplate.Triggers下添加即可。你的触发器就像
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Source" Value="eraser_grey.ico"/>
</Trigger>
让它更干净一点。我会添加一个服务类,它包含一个名为"DisabledIcon“或类似的附加属性,并将其用作一个值,而不是硬编码的值。
不幸的是,改变整个风格是我现在能想到的唯一可行的方法。
编辑
好的,经过进一步的研究,这里有一个很好的解决方案,尽管我对它不满意,因为它非常丑陋:(但很抱歉,我现在没有更好的想法。
<MenuItem Header="_Divorce" Command="...">
<MenuItem.Icon>
<ContentControl>
<ContentControl.ContentTemplate>
<DataTemplate>
<Image x:Name="iconImage" Source="arrowDown.png"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}}" Value="False">
<Setter TargetName="iconImage" Property="Source" Value="close.png"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
</MenuItem.Icon>
</MenuItem>
发布于 2011-07-07 17:51:10
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Source" TargetName="Image" Value="eraser_grey.ico"/>
</Trigger>
当你尝试这样做的时候,它会起作用吗
https://stackoverflow.com/questions/6608352
复制相似问题