频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
基于继承类的属性模版中无法绑定的原因和解决方法
2014-10-18 08:54:32           
收藏   我要投稿
这个的晚上想学学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>

点击复制链接 与好友分享!回本站首页
上一篇:网站性能之meta标签
下一篇:错误信息的一种定义方式
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站