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="Config\Tools\Tools_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="" Height="" 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="" Height=""--></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>
2、菜单
<Menu x:Name="menuTools" ItemsSource="{Binding Source={StaticResource ResourceKey= toolsDS}}" Background="Transparent" ></Menu>
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 ;
case "false":
return 0.5;
default:
return ;
}
} public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
} }
WPF:设置弹出子菜单的是否可用状态及效果的更多相关文章
- WPF datagrid 弹出右键菜单时先选中该项
private void datagrid_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { ...
- WPF TriggerAction弹出子窗体 TargetedTrigger、TargetedTriggerAction用法
namespace TriggerAction { public class OpenWindowAction : TriggerAction<DependencyObject> { pu ...
- WPF FileFolderDialog 和弹出子窗口的一些问题
摘要:本文主要是WPF中 FileFolderDialog的相关问题,补充了关于在父窗口弹出子窗口,以及子窗口的相关属性(Data Binding)和命令绑定(Delegate Command)问题, ...
- Android的Toolbar(含溢出菜单设置[弹出菜单的使用])的使用PopMenu的样式
http://blog.csdn.net/yingtian648/article/details/52432438(转载) 1.在Toolbar.xml中设置弹出菜单的风格(app:popupThem ...
- [Flex] PopUpButton系列 —— 设置弹出菜单与主按钮之间的间隔
<?xml version="1.0" encoding="utf-8"?><!--设置弹出菜单与主按钮之间的间隔 PopUpButtonPo ...
- 转:jQuery弹出二级菜单
<html> <head> <meta http-equiv="content-type" content="text/html; char ...
- 关于WPF的弹出窗口
几个重要的概念需要清楚: Show和ShowDialog区别 1.调用Show方法后弹出子窗口后,线程会继续往下执行.调用ShowDialog方法弹出子窗口后,线程会阻塞,直到子窗口关闭才继续往下执行 ...
- EditorGUILayout.EnumPopup 枚举弹出选择菜单
http://www.unity蛮牛.com/thread-25490-1-1.html http://www.unity蛮牛.com/m/Script/EditorGUILayout.EnumPop ...
- fancybox 关闭弹出窗口 parent.$.fancybox.close(); 无反应 fancybox 关闭弹出窗口父页面自动刷新,弹出子窗口前后事件
当我们在父页面使用 fancybox 弹出窗口后,如果想自己手动关闭,则可以 function Cancel() { parent.$.fancybox.close(); } 如果关闭没有反应,最好看 ...
随机推荐
- VTK GetScalarPointer() and GetScalarComponentAsFloat() not work
I am using VTK 5.10.1 with VS 2010, and the following example does not work on my machine: http://ww ...
- 关于GreenOdoo的一个Bug
动态创建字段的时候,虽然字段已经创建,但是显示的时候会报没有新创建的字段错误: 但是原版是没有任何问题的,记录一下.
- OpenERP在哪储存附件?
我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...
- jquery选择器实例说明
选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $( ...
- Spark Kill Application
yarn application -kill <applicationId>
- HTML input文本框设置和移除默认值
这里想实现的效果是:设置和移除文本框默认值,如下图鼠标放到文本框中的时候,灰字消失. 1.可以用简单的方式,就是给input文本框加上onfocus属性,如下代码: <input id=&quo ...
- C#,.Net自动生成大写字母编码
public static string GetChineseSpell(string strText) { int len = strText.Length; ...
- BigInteger在Java8中的改进
BigInteger在Java8里增加了一组方法: 123 public byte byteValueExact()public int intValueExact()public long long ...
- Multi-level Multi-select plugin
Property file: Country[tab]City United States[tab]San Francisco United States[tab]Chicago Mexico[tab ...
- CocoaPods 学习
参考文章 git address 1.简绍:CocoaPods是一个负责管理iOS项目中第三方开源代码的工具. 2.安装过程: $ sudo gem install cocoapods $ pod s ...