WPF:设置弹出子菜单的是否可用状态及效果

摘要:
具体格式如下:StackBlock{TextBlock{Image},TextBlock}}问题:1。加载表单后,无法获取次子菜单控件。2.当分层数据模板中的StackBlock设置为不可用时,弹出子菜单不可用,但当StackBlock在恢复程序中设置为可用时,MenuItem中的图像仍然不可用。

需求: 设置弹出子菜单(二级)项仅首项可用,其他项均不可用;不可用是呈灰色效果。

          注:

            菜单项都是依据层级数据模板。具体格式如下:

                 StackBlock{TextBlock{Image}、TextBlock}}

问题:

         1、窗体加载后,获取不到二级子菜单控件(二级菜单项弹出后,可获取所有二级子菜单)。

              注:仅能获取一级菜单控件,但能获取二级子菜单绑定的数据源。

    2、层级数据模板内StackBlock设置为不可用时(绑定数据源实现),弹出子菜单不可用,但恢复程序中恢复StackBlock设置为可用,后MenuItem内的Image仍不可用。

          3、样式中可设置MenuItem的不可用状态及效果,但若不将StackBlock设置为不可用则,Menuitem一致可用。

    注:即便是先将TextBlock设置为不可用,再设置为可用,其下的Image仍不可用。

解决方法:

    1、通过绑定数据源来设置可用不可用

    2、绑定的MenuItem内的对象:Image、TextBlock

    3、灰色效果也绑定到是否可用数据源。

        注:是否可用转换为灰色效果(Opacity)需要值转换。

参考代码:

  1、层级数据模板

WPF:设置弹出子菜单的是否可用状态及效果第1张WPF:设置弹出子菜单的是否可用状态及效果第2张
 <!--工具数据源-->
        <XmlDataProvider x:Key="toolsDS" Source="ConfigToolsTools_Classroom.xml" XPath="Tools/Tool"></XmlDataProvider>
        <!--Tool模板-->
        <HierarchicalDataTemplate DataType="Tool" ItemsSource="{Binding XPath=Tool}" >
            <StackPanel  Orientation="Vertical" VerticalAlignment="Center" Margin="0,10,0,0"   > <!--MouseEnter="MenuItemImage_MouseEnter"  MouseLeave="MenuItemImage_MouseLeave"-->
                <TextBlock Tag ="{Binding XPath=@Name}" Width="38" Height="38" Margin="0,0,0,0" VerticalAlignment="Center"  >
                    <Image  x:Name="img_menuIcon" MouseEnter="MenuItemImage_MouseEnter"  MouseLeave="MenuItemImage_MouseLeave"   Source="{Binding XPath=@ImagePath0}"  IsEnabled="{Binding XPath=@isEnable}" Opacity="{Binding XPath=@isEnable,Converter= {StaticResource  bto}}"><!--Width="38" Height="38"--></Image>
                </TextBlock>
                <TextBlock x:Name="img_Title" Text ="{Binding XPath=@Title}" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" Margin="0,3,0,0" Foreground="#FFD1D1D1" FontSize="{Binding XPath=@FontSize}" MouseEnter="MenuItemText_MouseEnter"  MouseLeave="MenuItemText_MouseLeave" IsEnabled="{Binding XPath=@isEnable}" Opacity="{Binding XPath=@isEnable,Converter= {StaticResource  bto}}">
                </TextBlock>
            </StackPanel>
        </HierarchicalDataTemplate>
View Code

  2、菜单

WPF:设置弹出子菜单的是否可用状态及效果第1张WPF:设置弹出子菜单的是否可用状态及效果第4张
<Menu x:Name="menuTools" ItemsSource="{Binding Source={StaticResource ResourceKey= toolsDS}}"  Background="Transparent" ></Menu>
View Code

  3、值转换

WPF:设置弹出子菜单的是否可用状态及效果第1张WPF:设置弹出子菜单的是否可用状态及效果第6张
    public class OpacityValueConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string c = (string)value;

            switch (c)
            {
                case "true":
                    return 1;
                case "false":
                    return 0.5;
                default:
                    return 1;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)  
        {  
            throw new NotImplementedException();  
        }  

    
    }
View Code

   

免责声明:文章转载自《WPF:设置弹出子菜单的是否可用状态及效果》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇@pytest.mark.name_of_the_mark,注册标记使用方法什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wpf数据绑定更新通知

类似于这样子的;大致的意思是:一个代码变量,通过改变变量的值,绑定这个变量的这个圆颜色也在变化 就是一种心跳效果 在网上数据触发的感觉不多,废了不少时间,这里做个总结 1:通知 class NotifyBase : INotifyPropertyChanged { public event PropertyChangedEve...

wpf学习笔记更新数据源

此示例基于wpf学习笔记-指定数据源1.让对象实现INotifyPropertyChanged接口,以便属性更改发出通知 {publicPerson(){}publicPerson(stringname,intage){this.name=name;this.age=age;}stringname;publicstringName{get{returnth...

WPF DesiredSize &amp;amp; RenderSize

DesiredSize DesiredSize介绍 关于DesiredSize的介绍,可以查看最新微软文档对DesiredSize的介绍 DesiredSize,指的是元素在布局过程中计算所需要的大小。 通过调用方法Measure计算得到DesiredSize 1 element.Measure(availableSize); 2 var desi...

一起谈.NET技术,WPF 自定义快捷键命令(Command) 狼人:

     命令简介      WPF 中的命令是通过实现 ICommand 接口创建的。ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged)。Execute 执行与命令关联的操作。CanExecute 确定是否可以在当前命令目标上执行命令。如果集中管理命令操作的命令管理器检测到命令源中发...

wpf中内置资源文件

wpf中包含三种文件类型 资源文件:编译到可执行或库 WPF 程序集中的数据文件。 内容文件:与可执行 WPF 程序集具有显式关联的独立数据文件。 源站点文件:与可执行 WPF 程序集没有关联的独立数据文件。 这三种类型的文件之间的一个重要区别是:资源文件和内容文件在生成时是已知的;程序集明确地知道它们的存在。但是对于源站点文件,程序集可能完全不知道它们...

wpf窗口禁止最大化但允许调整大小

wpf中窗口禁止最大化可以通过属性ResizeMode来设置,但是ResizeMode有一个问题就是如果ResizeMode设置为NoResize的话,是可以禁止最大化的,但是这样同时也就不能拖动调整大小了,通过如下方法可以达到这个效果,通过win32 API来设置: 需要用到的API函数: [DllImport("user32.dll", EntryPo...