首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用DataTrigger时MenuItem.Icon不会变灰

使用DataTrigger时MenuItem.Icon不会变灰
EN

Stack Overflow用户
提问于 2011-07-07 17:16:53
回答 2查看 1.3K关注 0票数 1

如果菜单项被禁用(只是一个灰色的版本),我会尝试显示一个不同的图像作为menuitem.icon。这是我尝试过的:

代码语言:javascript
运行
复制
<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>

错误消息:

代码语言:javascript
运行
复制
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数据触发器绑定出了什么问题?

感谢大家的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-07 18:43:01

您可以尝试执行以下操作:

添加像CubaLibre mentioned这样的触发器

而不是使用目标名称,这是行不通的。使用以下代码。

代码语言:javascript
运行
复制
<Trigger Property="IsEnabled" Value="False">
   <Setter TargetName="Image">
       <Setter.Value>
            <Image Source="eraser_grey.ico"/>
       </Setter.Value>
   </Setter>
</Trigger>

如果这不起作用(对不起,目前我不能亲自测试它)。你也可以用一种很难的方式来做:

为menuitem创建一个样式,您现在可以完全复制所需角色模板的控件模板中的original style,只需在ControlTemplate.Triggers下添加即可。你的触发器就像

代码语言:javascript
运行
复制
<Trigger Property="IsEnabled" Value="False">
  <Setter Property="Source" Value="eraser_grey.ico"/>
</Trigger>

让它更干净一点。我会添加一个服务类,它包含一个名为"DisabledIcon“或类似的附加属性,并将其用作一个值,而不是硬编码的值。

不幸的是,改变整个风格是我现在能想到的唯一可行的方法。

编辑

好的,经过进一步的研究,这里有一个很好的解决方案,尽管我对它不满意,因为它非常丑陋:(但很抱歉,我现在没有更好的想法。

代码语言:javascript
运行
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2011-07-07 17:51:10

代码语言:javascript
运行
复制
<Trigger Property="IsEnabled" Value="False">
   <Setter Property="Source" TargetName="Image" Value="eraser_grey.ico"/>
</Trigger>

当你尝试这样做的时候,它会起作用吗

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6608352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档