WPF效果第二百一十一篇之TreeView勾选

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF效果第二百一十一篇之TreeView勾选相关的知识,希望对你有一定的参考价值。

前面已经实现了WPF效果第二百零二篇之TreeView带连接线,给专家展示,结果人家有点不满意;然后提了个要求:能不能每个节点都能让我随心所欲的勾选;咱好像啥也不能说,只能尽量满足就行了;二话不多说直接看效果:

1、前台关于ItemTemplate如下:

<HierarchicalDataTemplate x:Key="LedDataTemplate" DataType="x:Type Models:TreeModel" ItemsSource="Binding Children,Mode=TwoWay">
    <WrapPanel Orientation="Horizontal" Margin="10">
        <!--支持勾选-->
        <CheckBox Style="StaticResource TickCheckBox" IsChecked="Binding IsChecked" />
        <Path Data="M138.66666,63.999992 C98.133335,63.999992 64.000004,98.133339 64.000004,138.66666 L64.000004,539.73335 C64.000004,580.26667 98.133335,614.39997 138.66666,614.39997 L793.60003,614.39997 C834.13335,614.39997 868.26665,580.26667 868.26665,539.73335 L868.26665,138.66666 C868.26665,98.133339 834.13335,63.999992 793.60003,63.999992 z M138.66666,0 L793.60003,0 C870.40001,0 932.26665,61.866661 932.26665,138.66666 L932.26665,539.73335 C932.26665,616.53333 870.40001,678.39997 793.60003,678.39997 L499.2,678.39997 499.2,785.06666 723.2,785.06666 C740.26665,785.06666 755.2,800.00001 755.2,817.06666 755.2,834.13331 740.26665,849.06666 723.2,849.06666 L211.2,849.06666 C194.13334,849.06666 179.2,834.13331 179.2,817.06666 179.2,800.00001 194.13334,785.06666 211.2,785.06666 L435.2,785.06666 435.2,678.39997 138.66666,678.39997 C61.866665,678.39997 0,616.53333 0,539.73335 L0,138.66666 C0,61.866661 61.866665,0 138.66666,0 z" Stretch="Fill" Width="16" Height="16" Fill="White" Visibility="Binding ItemType,Converter=StaticResource ItemTypeEnumToPathVisibilityConvert" />
        <TextBlock x:Name="ShowTbk" Margin="4,0,0,0" Text="Binding Name,Mode=TwoWay" Foreground="White" FontSize="Binding ItemType,Converter=StaticResource ItemTypeEnumToFontSizeConvert" />
    </WrapPanel>
</HierarchicalDataTemplate>

2、后台关于勾选通过IsChecked属性控制:

private void SetIsChecked(bool ? value, bool updateChildren, bool updateParent)

    if(value != isChecked)
    
        isChecked = value;
        if(updateChildren && isChecked.HasValue)
        
            Children.ToList().ForEach(c => c.SetIsChecked(isChecked, true, false));
        
        if(updateParent && _parent != null)
        
            _parent.VerifyCheckState();
        
        OnPropertyChanged("IsChecked");
    

3、关于VerifyCheckState方法:

private void VerifyCheckState()

    int count = Children.Where(x => x.IsChecked == false).Count();
    bool ? state = count > 0 ? false : true;
    SetIsChecked(state, false, true);

最终简单的效果先这样吧;以后有时间的话,可以再去摸索一下更复杂的效果;编程不息、Bug不止、无Bug、无生活;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!

以上是关于WPF效果第二百一十一篇之TreeView勾选的主要内容,如果未能解决你的问题,请参考以下文章

WPF效果第二百零二篇之TreeView带连接线

WPF效果第二百零一篇之实现合并单元格

LeetCode刷题:第二百一十七题 存在重复元素

第二百一十四节,jQuery EasyUI,Calendar(日历)组件

第二百一十八节,jQuery EasyUI,TimeSpinner(时间微调)组件

第二百一十三节,jQuery EasyUI,NumberBox(数值输入框)组件