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

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

ebdf0bd75b8e1b67ee453744bb3450c9.gif

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);
}

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值