原文:基于继承类的属性模版中无法绑定的原因和解决方法

这个的晚上想学学WPF 做一个类似于ERP 左边菜单。构思一下思路 。。。。。。

创建一个类基于Expander类。

 1  public class ExpanderBox : Expander
 2     {
 3         #region 定义依赖属性
 4
 5
 6         //定义ItemsSource数据源
 7         public static readonly DependencyProperty ItemsSourcesProperty = DependencyProperty.Register("ItemsSources", typeof(object), typeof(ExpanderBox));
 8         //定义ItemsCommand ,Header头部点击命令。
 9         public static readonly DependencyProperty ItemsCommandProperty = DependencyProperty.Register("ItemsCommand", typeof(ICommand), typeof(ExpanderBox));
10         //定义HeaderHeight,Header头部的高度。
11         public static readonly DependencyProperty HeaderHeightProperty = DependencyProperty.Register("HeaderHeight", typeof(int), typeof(ExpanderBox));
12
13         public object ItemsSources
14         {
15             get { return (object)GetValue(ExpanderBox.ItemsSourcesProperty); }
16             set { SetValue(ExpanderBox.ItemsSourcesProperty, value); }
17         }
18         public ICommand ItemsCommand
19         {
20             get { return (ICommand)GetValue(ExpanderBox.ItemsCommandProperty); }
21             set { SetValue(ExpanderBox.ItemsSourcesProperty, value); }
22         }
23
24         public int HeaderHeight
25         {
26             get { return (int)GetValue(ExpanderBox.HeaderHeightProperty); }
27             set { SetValue(ExpanderBox.HeaderHeightProperty, value); }
28         }
29         #endregion
30
31         //public  ExpanderBox()
32         //{
33         //    HeaderHeight = 10;
34         //}
35
36
37     }

由于 Expander中Content中要放一个ListBox,所以定义了一个依赖属性ItemsSources,HeaderHeight是头部的高度。

后然构造好了,就要写前台的样式了。

 1 <Style TargetType="{x:Type local:ExpanderBox}">
 2         <Setter Property="Template">
 3             <Setter.Value>
 4                 <ControlTemplate TargetType ="local:ExpanderBox">
 5                      <Grid>
 6                         <Grid.RowDefinitions>
 7                             <RowDefinition ></RowDefinition>
 8                             <RowDefinition></RowDefinition>
 9                         </Grid.RowDefinitions>
10                         <ToggleButton Grid.Row="0" Height="{TemplateBinding HeaderHeight}" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Content="{TemplateBinding Header}" Command="{TemplateBinding ItemsCommand}"></ToggleButton>
11                         <ListBox x:Name="itemsBox"  Grid.Row="1" ItemsSource="{TemplateBinding ItemsSources}" Visibility="Collapsed" ></ListBox>
12                     </Grid>
13                     <ControlTemplate.Triggers>
14                         <Trigger Property="Expander.IsExpanded" Value="true">
15                             <Setter Property="Visibility" Value="Visible" TargetName="itemsBox"></Setter>
16                         </Trigger>
17                     </ControlTemplate.Triggers>
18                 </ControlTemplate>
19             </Setter.Value>
20         </Setter>
21     </Style>

从代码框中看到一条有背景色代码,为什么要标出来呢!请不要急,继续看下文

在窗口中定义ExpanderBox

1 <local:ExpanderBox x:Name="ex"   Header="采购合同" HeaderHeight="40"  ItemsSources="{Binding Lists}"></local:ExpanderBox>
2             <local:ExpanderBox x:Name="ex1"  IsExpanded="True"  Header="采购合同" HeaderHeight="{Binding Height}"  ItemsSources="{Binding Lists}"></local:ExpanderBox>

如我所料,运行结果如图!

但是我发现,我无论怎样设置HeaderHeight的值,都无法改变ToggleButton高度。

在网上找了一些资料,很幸运的是在微软网站中找到答案,我就不多写了,直接贴上原文

网址:http://msdn.microsoft.com/zh-cn/library/ms742882.aspx

对于模板方案来说,TemplateBinding 是绑定的优化形式,类似于使用 {Binding RelativeSource={RelativeSource TemplatedParent}} 构造的 Binding。 TemplateBinding 始终为单向绑定,即使所涉及的属性默认为双向绑定。 所涉及的两个属性都必须是依赖项属性。

RelativeSource 是另一个标记扩展,有时与 TemplateBinding 结合使用或者代替它使用,以便在模板中执行相对属性绑定。

此处未介绍控件模板概念;有关详细信息,请参阅 Control 样式和模板。

特性语法是最常用于该标记扩展的语法。 在 TemplateBinding 标识符字符串之后提供的字符串标记被指定为基础 TemplateBindingExtension 扩展类的 Property 值。

对象元素语法也可行,但因为没有实际的应用,所以未进行演示。 TemplateBinding 用于使用计算的表达式来填充资源库内的值,因此使用 TemplateBinding 的对象元素语法来填充 <Setter.Property> 属性元素语法就会变得繁冗而多余。

TemplateBinding 还可以在详细特性用法中使用,以便将 Property 属性指定为一个 property=value 对:

看完这句话不能明白上面有两种背景颜色的代码。前面是单向绑定,所以在前台赋值无效,而后者是双向绑定。

总结:

TemplateBinding 是单向绑定形式。

Binding是多向的。

 

以上只是个人想法和实践经验,如果有文字错误和语法错误,请加以指点!

QQ:247039968

emil:wujc@younger.com

无论是美女的歌声,还是鬣狗的狂吠,无论是鳄鱼的眼泪,还是恶狼的嚎叫,都不会使我动摇

基于继承类的属性模版中无法绑定的原因和解决方法相关推荐

  1. 关于servlet类,继承HttpServlet,但是无法导入HttpServlet包的原因和解决方法

    关于servlet类,继承HttpServlet,但是无法导入HttpServlet包的原因和解决方法 参考文章: (1)关于servlet类,继承HttpServlet,但是无法导入HttpServ ...

  2. SpringBoot 中@Autowired 注入失效原因及解决方法

    SpringBoot 中@Autowired 注入失效原因及解决方法 1.原因分析 1.1 包没有被扫描到通过@Autowired注入的类所在的包路径不在Application启动类所在的包/子包路径 ...

  3. python import变灰_pycharm中import呈现灰色原因的解决方法

    1. 问题描述: 同目录下,当多个文件之间有相互依赖的关系的时候,import无法识别自己写的模块,PyCharm中提示No Module. 2. 解决步骤: (1). 打开File--> Se ...

  4. mysql安装过程中failed_mysql安装失败原因和解决方法

    作者:CWS_chen 转载自https://blog.csdn.net/ mysql数据库安装不了了!mysql最后一步安装不上!mysql就是安装不上!是不是很头疼,很伤脑筋,现在大家不用着急了, ...

  5. Java中死锁产生的原因及解决方法

    一.什么是死锁 死锁就是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的现象,若无外力作用,他们都无法推进下去. 简单来说就是A和B若同时都有一个资源,在此之外还想拥有对方的资 ...

  6. python3类的继承详解_基于python3 类的属性、方法、封装、继承详解

    下面小编就为大家带来一篇基于python3 类的属性.方法.封装.继承实例讲解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Python 类 Python中的类提供了 ...

  7. 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

    在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法 参考文章: (1)在同一个类中,一个方法调用另外一个有注解(比如@Async, ...

  8. 定义一个圆形Circle类。属性: r:半径 成员方法:get/set方法 showArea方法:打印圆形面积 showPerimeter方法......

    需求: 定义一个圆形Circle类. 属性: r:半径 成员方法: get/set方法 showArea方法:打印圆形面积 showPerimeter方法:打印圆形周长 定义测试类,创建Circle对 ...

  9. Ghost过程中出现GHOSTERR.TXT文件的解决方法

    强文:Ghost过程中出现GHOSTERR.TXT文件的解决方法 注:这是篇绝强的文章,作者不明,在好几个老论坛都有转载,反应很热烈,给大家共享一下小人物,大博客0Qo-GUu9F+rR :p$gY& ...

最新文章

  1. xHTML+div布局:三个div,两边div宽度固定,中间div宽度自适应
  2. Android开发之策略模式初探
  3. axios 同步_githubactions进行github仓库和gitee仓库同步
  4. linux 命令02
  5. Using the URLconf defined in catsui.urls, Django tried these URL patterns, in this order:
  6. 分享一次与SharpDX坑爹Bug刚正面的过程
  7. 【计算机就业-算法工程师】校招想去互联网公司担任算法工程师该怎么准备
  8. NPOI 教程 - 3.2 打印相关设置
  9. 客户端手册_增值税发票管理系统“2.0”版——客户端环境配置问题
  10. arrays中copyof复制两个数组_Core Java - Arrays
  11. 外参矩阵转四元数,左右手坐标系转化1
  12. 挖矿病毒zz.sh——记一次linux(centos)成为矿机后的排查与修复过程
  13. YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer
  14. 有道云笔记分享_有道云笔记的使用分享
  15. 浙江农林大学计算机分数线,浙江农林大学各专业录取分数线
  16. 改变鼠标样式的两种方法
  17. php聚合查询,php elasticsearch 聚合查询(Aggregation)
  18. Vrep中的视觉传感器添加,移动,旋转,和视图
  19. poi ppt 作者属性 修改_Poi PPT PPTX 处理 [生产环境使用]
  20. 今日头条能干掉微信么?

热门文章

  1. shell中各种括号的用法
  2. leetcode算法题--飞机座位分配概率
  3. 二维方向图matlab程序,二维点源阵方向图,阵因子matlab
  4. OpenGL中投影变换矩阵的反向推导
  5. C++中bool类型变量初值对程序的影响
  6. Dataguard配置前提条件
  7. CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5
  8. 从「林」开始: imx51-linux-rt3070ap-dhcpd
  9. C#操作XML总结1
  10. c#中泛型参数与object参数导致重写无效。