首页 > 其他分享 >ItemsControl 控件

ItemsControl 控件

时间:2024-03-12 22:02:04浏览次数:29  
标签:控件 PhonogramPoco phonogramPocos new ItemsControl public

一、ItemsControl 简介

    ItemsControl 是用来表示一些条目集合的控件,它的成员是一些其它控件的集合。
    其继承关系如下:
    在这里插入图片描述
    其常用的派生控件为:ListBox、ListView、ComboBox,为ItemsControl的具体实现。
    ItemsControl的成员条目可以为不同的类型,如自定义的类型等。常常用于派生的ListBox、ListView、ComboBox 等控件的子条目中。

二、ItemsControl 控件显示数据

1、设置自定义数据类型 :PhonogramPoco

   public class PhonogramPoco
    {
        /// <summary>
        /// 平假名
        /// </summary>
        public string? Hiragana { get; set; }
        /// <summary>
        /// 片假名
        /// </summary>
        public string? Katakana { get; set; }
        /// <summary>
        /// 音标
        /// </summary>
        public string? Soundmark { get; set; }

        /// <summary>
        /// 读音
        /// </summary>
        public string? SoundUri { get; set; }
    }

2、viewmodels

   public partial class PhonogramViewModel : ICloseable
   {
     private List<PhonogramPoco> phonogramPocos = new();
     public List<PhonogramPoco> PhonogramPocos { get => phonogramPocos; }
     void InitializePhonogramList()
     {
         phonogramPocos.Add(new PhonogramPoco { Hiragana = "あ", Katakana = "ア", Soundmark = "a", SoundUri = @"\Resources\qinguyin\a.mp3" });
         phonogramPocos.Add(new PhonogramPoco { Hiragana = "い", Katakana = "イ", Soundmark = "i", SoundUri = @"\Resources\qinguyin\i.mp3" });
         phonogramPocos.Add(new PhonogramPoco { Hiragana = "う", Katakana = "ウ", Soundmark = "u", SoundUri = @"\Resources\qinguyin\u.mp3" });
         phonogramPocos.Add(new PhonogramPoco { Hiragana = "え", Katakana = "エ", Soundmark = "e", SoundUri = @"\Resources\qinguyin\e.mp3" });
         phonogramPocos.Add(new PhonogramPoco { Hiragana= "お", Katakana= "オ", Soundmark="o", SoundUri = @"\Resources\qinguyin\o.mp3" });
         phonogramPocos.Add(new PhonogramPoco { Hiragana = "お", Katakana = "オ", Soundmark = "o", SoundUri = @"\Resources\qinguyin\o.mp3" });
 
}

     }

3、View 创建ItemsControl控件,并将其ItemsSource属性绑定到以上自定义数据,以显示上面的数据

 

  <ItemsControl Grid.Column="1" Grid.Row="1" ItemsSource="{Binding PhonogramPocos}">
      <ItemsControl.Template>
          <!--ItemsControl作为一个容器,设置其整体的外观-->
          <ControlTemplate TargetType="ItemsControl">
              <Border BorderBrush="Red" BorderThickness="6" CornerRadius="30">
                  <ItemsPresenter/>
              </Border>
          </ControlTemplate>
          
      </ItemsControl.Template>
      <ItemsControl.ItemsPanel>
          <!--设置该容器中子控件的布局类型为 WrapPanel-->
          <ItemsPanelTemplate>
              <UniformGrid/>
          </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>
      <ItemsControl.ItemTemplate>
          <!--设置容器中每个条目的模板-->
          <DataTemplate>
              <DataTemplate.Resources>
                  <Style TargetType="TextBlock">
                      <Setter Property="FontSize" Value="14"/>
                      <Setter Property="HorizontalAlignment" Value="Center"/>
                  </Style>
              </DataTemplate.Resources>
              <Grid>
                  <Rectangle Fill="Silver"/>
                  <WrapPanel>
                      <TextBlock Margin="3,3,3,0" Text="{Binding Path=Hiragana}"/>
                      <TextBlock Margin="3,0,3,7" Text="{Binding Path=Katakana}"/>
                  </WrapPanel>
              </Grid>
          </DataTemplate>
      </ItemsControl.ItemTemplate>
      <ItemsControl.ItemContainerStyle>
          <!--设置容器中每个子控件的样式,如尺寸及Triggers等-->
          <Style>
              <Setter Property="Control.Width" Value="100"/>
              <Setter Property="Control.Margin" Value="40"/>
              <Style.Triggers>
                  <Trigger Property="Control.IsMouseOver" Value="True">
                      <Setter Property="Control.ToolTip" 
                              Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Content.SoundUri}"/>
                  </Trigger>
              </Style.Triggers>
          </Style>
      </ItemsControl.ItemContainerStyle>
       

  </ItemsControl>

 

4、绑定view和viewmodel

   public partial class phonogramView : Window
   {
       public phonogramView()
       {
           this.DataContext = new PhonogramViewModel();
           InitializeComponent();
       }
   }

 

 三、重要属性总结

1、ItemsSource:主要用来绑定到数据源,以将数据填充到ItemsControl中。如:
ItemsSource="{Binding Source={StaticResource placesData}}"

2、ItemContainerStyle:其类型为Style,用来设置ItemsControl对应item的外观样式。可在资源中设置该属性,以控制每个items的样式Style。如:
ItemContainerStyle="{StaticResource lsty}"

3、ItemsPanel:设置items如何进行布局,如:是以StackPanel的形式,还是以Grid的形式来显示ItemsControl包含的所有元素。

4、ItemTemplate:其类型为DataTemplate,由于控件对应的条目主要就是用来显示数据的,所以其条目模板在此就是用来设置数据显示样式的,如上面的DataTemplate设定数据的显示方式。【注意:与第二点的区别,ItemContainerStyle对应的是每个具体item的样式style;而第四点对应的是每个item的模板Template,用于自定义数据显示的样式】

标签:控件,PhonogramPoco,phonogramPocos,new,ItemsControl,public
From: https://www.cnblogs.com/cdaniu/p/18069370

相关文章

  • 高dpi下,Vb.net调整控件位置的小经验
     高dpi下,Vb.net调整控件位置的小经验 boy8199/3vdo/club最近写了一个捕快TXT网文采集软件,结果发现在DPI不同的情况下,软件布局会变形.找了半天原因才发现是DPI的问题,默认系统的dpi是96(100%)现在显示器的屏幕比较大,所以好多人会把显示放大到125%或150%导致程序控件变形......
  • Qt 自定义控件
    参考:https://blog.csdn.net/danshiming/article/details/134383612https://blog.csdn.net/u011832219/article/details/128531359 1、创建自定义控件新建qt项目(项目1),选择其他项目中的“Qt设计师自定义控件”,构建套件的版本类型需要与'帮助'列表中'AboutQtCreator'弹窗的......
  • 新鲜出炉!界面控件DevExpress WinForms 2024产品路线图预览(二)
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!本文将介绍2024年DevExpressWinForms第一个主要更新......
  • 安卓开发学习-按钮控件
    java代码点击查看代码packagecom.android.myapp;importandroid.annotation.SuppressLint;importandroid.os.Bundle;importandroid.widget.CheckBox;importandroid.widget.RadioGroup;importandroid.widget.Switch;importandroid.widget.TextView;importandroi......
  • 【WPF】-ComboBox控件详解
    ComboBox控件在很多方面都类似于ListBox控件,但占用的空间要少得多,因为项目列表在不需要时会隐藏起来。ComboBox控件在Windows中的很多地方都有使用,但为了确保每个人都知道它的外观和工作方式,我们将直接进入一个简单的示例:<Windowx:Class="WpfTutorialSamples.ComboBox_co......
  • 用lazarus编写的类RichView显示控件初步支持markdown格式的表格,并增加单元格字体颜色
    用lazarus编写的类RichView显示控件初步支持markdown格式的表格,并增加单元格字体颜色等功能,可在信创电脑使用,功能慢慢添加中。github:https://github.com/szlbz/QFComponent其中图像格式支持:bmp,jpg,png等 除以上格式外,还支持单、双分割线等......
  • VB.NET 在DataGridview 动态添加下拉列表控件DataGridViewComboBoxColumn要点两次才可
     DataGridview属性EditMode设为EditOnEnter 添加如下事件代码PrivateSubdgvZhiJianXiangMu_CellClick(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.Forms.DataGridViewCellEventArgs)HandlesdgvZhiJianXiangMu.CellClickIfe.ColumnIndex>=0AndAls......
  • ItemsControl和ListView、ListBox的区别
    1、ItemsControl用来显示一个数据项的集合,它的底层是一个列表,它可以非常灵活的展示布局和数据以下是例子<ItemsControlItemsSource="{BindingStudent}"><ItemsControl.ItemTemplate><DataTemplate> <TextBlockText="{BindingId}"/> <Tex......
  • C# 控件长按效果
    1.使用计时器,定时执行变量自增加参考:https://www.cnblogs.com/dotnet261010/p/7113523.html2.对控件添加两个事件(MouseUp和MouseDown) MouseDown方法中重置计数且打开计时器MouseUp方法中去关闭计时器根据变量结果做延时触发。注意:notifyIcon不支持实例: 参考视频:https://......
  • qt输入控件限制输入类型
    限制输入类型有两个控件,根据第一个控件的类型,限制第二个控件可以输入的值代码QComboBoxcomboBox;comboBox.addItem("字符串");comboBox.addItem("数字");layout.addWidget(&comboBox);//连接信号与槽QObject::connect(&comboBox,QOverload<int>::of(&QComboBox::curre......