当前位置: 首页 > news >正文

5.2.1 WPF 通过ItemControl自己做柱状图

1.

最终效果如下图:

1.1 准备数据 ViewModel

  public class PrimaryItemModel
  {
      public double Value { get; set; }
      public string XLabel { get; set; }
  }
 public class MainViewModel
 {
     public ObservableCollection<PrimaryItemModel> PrimaryList { get; set; }

     public MainViewModel()
     {
         Random random = new Random();
         PrimaryList = new ObservableCollection<PrimaryItemModel>();
         for (int i = 0; i < 15; i++)
         {
             PrimaryList.Add(new PrimaryItemModel
             {
                 XLabel = DateTime.Now.ToString("mm:ss"),
                 Value = random.Next(30, 200)
             });
         }
         Task.Run(async () =>
         {
             while (true)
             {
                 await Task.Delay(2000);
                 Application.Current.Dispatcher.Invoke(() =>
                 {
                     PrimaryList.Add(new PrimaryItemModel
                     {
                         XLabel = DateTime.Now.ToString("mm:ss"),
                         Value = random.Next(30, 200)

                     });
                     PrimaryList.RemoveAt(0);

                 });
             }
         });   
     }
 }
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="5*"/>
    </Grid.ColumnDefinitions>
    <ItemsControl Grid.Column="1" ItemsSource="{Binding PrimaryList}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Rows="1"></UniformGrid>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid x:Name="grid" Background="Transparent">
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition Height="30"/>
                    </Grid.RowDefinitions>
                    <StackPanel VerticalAlignment="Bottom">
                        <TextBlock Text="{Binding Value}" HorizontalAlignment="Center"/>
                        <Border Width="10" Height="{Binding Value}" Background="Orange" 
                                VerticalAlignment="Bottom" CornerRadius="5,5,0,0"/>
                    </StackPanel>
                    <Border BorderBrush="#DDD" BorderThickness="0,1,0,0" Grid.Row="1"/>
                    <TextBox Text="{Binding XLabel}" Grid.Row="1" VerticalAlignment="Center"
                             HorizontalAlignment="Center"/>
                </Grid>
                <DataTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="grid" Property="Background" Value="#EEE"/>
                    </Trigger>
                </DataTemplate.Triggers>
            </DataTemplate>
           
        </ItemsControl.ItemTemplate>
        
    </ItemsControl>   
</Grid>

相关文章:

  • 英飞凌 TC3xx功能安全开发-MONBIST
  • Redis:List 类型 内部实现、命令及应用场景
  • 探秘Transformer系列之(21)--- MoE
  • 微前端实现方案对比Qiankun VS npm组件
  • EviMed:左手综述内容,右手参考文献!三步产出可溯源的万字医学综述!
  • python系统之综合案例:用python打造智能诗词生成助手
  • 【Python使用】嘿马python数据分析教程第1篇:Excel的使用,一. Excel的基本使用,二. 会员分析【附代码文档】
  • hadoop集群配置-scp命令
  • CTF类题目复现总结-[MRCTF2020]Hello_ misc 1
  • 分治算法之凸包问题
  • 解决ant-ui 表单校验通过但是未清楚校验提示的bug 示例
  • LeetCode算法题(Go语言实现)_21
  • 《C++知识点之拷贝构造函数》
  • Linux系统安装MySQL 8.0完整指南(新手友好版)
  • 小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据
  • spring boot前后端开发上传文件时报413(Request Entity Too Large)错误的可能原因及解决方案
  • 统计局数据分析网站基于Spring Boot SSM原创
  • 各种环境下安装软件的命令对比与总结
  • 算法导论(动态规划)——简单多状态
  • Docker学习--容器操作相关命令--docker wait 命令
  • 手机网站建设 的作用/推广平台哪儿有怎么做
  • 做网站什么科目/商业软文
  • 网站建设日程表/360推广官网
  • 用iis搭建网站/百度推广工具有哪些
  • 衡水安徽学校网站建设/佛山快速排名
  • 怎样用自己的pid做搜索网站/网站优化排名公司哪家好