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


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

              注:

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

                     StackBlock{TextBlock{Image}、TextBlock}}

    问题:

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

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

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

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

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

    解决方法:

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

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

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

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

    参考代码:

      1、层级数据模板

     <!--工具数据源-->
            <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、菜单

    <Menu x:Name="menuTools" ItemsSource="{Binding Source={StaticResource ResourceKey= toolsDS}}"  Background="Transparent" ></Menu>
    View Code

      3、值转换

        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

       

  • 相关阅读:
    排序算法<四>希尔排序
    排序算法<三>快速排序
    排序算法<二>冒泡排序
    排序算法<一>选择排序
    相信我这是水题ny1313
    斐波那契查找
    插值查找
    第四届蓝桥杯c/c++B组4
    如何使用NPM来管理你的Node.js依赖
    javascript深入学习
  • 原文地址:https://www.cnblogs.com/shenchao/p/5557200.html
Copyright © 2020-2023  润新知