5.02 WPF的 Combox、ListBox,slider、ProgressBar使用

  1. 关于Combox\ListBox使用:

1.1 内容绑定有两种方法,

优先使用方法1,因为列表变化的时候,Combox会自动显示新的内容。而方法2并不会实时更新。

方法1:使用DataContext

this.comboBox1.DisplayMemberPath = "name"; //显示的内容

this.comboBox1.SelectedValuePath = "address"; //SelectedValue对应的列

this.comboBox1.DataContext = m_Person2;

在xml中需要增加如下一句话:ItemsSource="{Binding}"

方法2:使用ItemsSource

this.comboBox.DisplayMemberPath = "name";

this.comboBox.SelectedValuePath = "address";

this.comboBox.ItemsSource = m_Person;

【备注】

1.例子中的name,address必须是 属性字段。至于Person是类或者结构体没有关系。

2.可以通过SelectedItem 得到选择的对象,或者SelectedValue直接得到选择对象中绑定的值。

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

if (this.comboBox1.SelectedIndex > -1)

{

var item= (this.comboBox1.SelectedItem) as Person;

MessageBox.Show(item.address.ToString());

// MessageBox.Show(this.comboBox.SelectedValue.ToString());

}

}

1.2 具体代码:

cs 复制代码
 public class Person
 {
     public string name { get; set; }
     public string address { get; set; }
 }
 public List<Person> m_Person = new List<Person>();
 public List<Person> m_Person2 = new List<Person>();


m_Person.Add(new Person { name = "mike1", address = "天街1号" });
m_Person.Add(new Person { name = "mike2", address = "天街2号" });
m_Person.Add(new Person { name = "mike3", address = "天街3号" });
m_Person.Add(new Person { name = "mike4", address = "天街4号" });
this.comboBox.DisplayMemberPath = "name";
this.comboBox.SelectedValuePath = "address";
this.comboBox.ItemsSource = m_Person;   //方法1

 m_Person2.Add(new Person { name = "marry1", address = "银河系1号" });
 m_Person2.Add(new Person { name = "marry2", address = "银河系2号" });
 m_Person2.Add(new Person { name = "marry3", address = "银河系3号" });
 m_Person2.Add(new Person { name = "marry4", address = "银河系4号" });
 this.comboBox1.DisplayMemberPath = "name";
 this.comboBox1.SelectedValuePath = "address";
 this.comboBox1.DataContext = m_Person2;  //方法2


 private void button_Click(object sender, RoutedEventArgs e)
 {
     m_Person.Add(new Person { name = "mike5", address = "天街5号" });
     m_Person2.Add(new Person { name = "marry5", address = "银河系5号" });

 }

界面:

XML 复制代码
 <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="143,149,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="comboBox_SelectionChanged"/>
 <ComboBox x:Name="comboBox1" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="153,217,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="comboBox1_SelectionChanged"/>

二、Slider

slider比较关键的参数是:

Minimum="0" Maximum="100" SmallChange="1" Orientation="Horizontal" TickPlacement="Both"

注意:对于label要实施显示这个slider的数值,可以用下列办法,即把label绑定到这个slider上。

Content="{Binding ElementName=slider, Path=Value, Mode=OneWay}"

XML 复制代码
  <Slider x:Name="slider" HorizontalAlignment="Left" Margin="359,103,0,0" VerticalAlignment="Top" Width="217" RenderTransformOrigin="0.5,0.5" Height="39"
          Minimum="0" Maximum="100" SmallChange="1"  Orientation="Horizontal"  TickPlacement="Both" >

  </Slider>
  <Label x:Name="label" Content="{Binding ElementName=slider, Path=Value, Mode=OneWay}" HorizontalAlignment="Left" Margin="370,142,0,0" VerticalAlignment="Top"/>

三、ProgressBar

比较关键的参数是:

Minimum="0" Maximum="100" Orientation="Horizontal"

另外:IsIndeterminate=true时,进度条将一直在动,含义是加载中。

<ProgressBar IsIndeterminate="true" Height="10" Minimum="0" Maximum="100" Width="100" Value="40"/>

备注:如果希望按了按钮后,进度条陆续移动,可以用如下方法实现:

cs 复制代码
private void button1_Click(object sender, RoutedEventArgs e)
{
    int start = (int)this.pbar1.Minimum;
    int end= (int)this.pbar1.Maximum;
    new Task(()=>
    {               
        for (int i = start; i < end; i++)
        {
            this.pbar1.Dispatcher.Invoke(()=> {
                this.pbar1.Value = i;
            });
            Thread.Sleep(100);
        }
    }).Start();      
}
相关推荐
风指引着方向3 小时前
归约操作优化:ops-math 的 Sum/Mean/Max 实现
人工智能·wpf
听麟7 小时前
HarmonyOS 6.0+ 跨端智慧政务服务平台开发实战:多端协同办理与电子证照管理落地
笔记·华为·wpf·音视频·harmonyos·政务
听麟11 小时前
HarmonyOS 6.0+ APP AR文旅导览系统开发实战:空间定位与文物交互落地
人工智能·深度学习·华为·ar·wpf·harmonyos
聆风吟º1 天前
CANN hccl 深度解析:异构计算集群通信库的跨节点通信与资源管控实现逻辑
人工智能·wpf·transformer·cann
无心水1 天前
分布式定时任务与SELECT FOR UPDATE:从致命陷阱到优雅解决方案(实战案例+架构演进)
服务器·人工智能·分布式·后端·spring·架构·wpf
LZL_SQ1 天前
HCCL测试框架中AllReduce边界条件测试设计深度剖析
wpf·cann
User_芊芊君子2 天前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
就是有点傻3 天前
WPF按钮走马灯效果
wpf
zuozewei3 天前
虚拟电厂聚合商平台安全技术体系深度解读
安全·wpf
极客智造3 天前
WPF 自定义控件:AutoGrid 实现灵活自动布局的网格控件
wpf