天天看點

C# WPF控件小結---ComboBox

  • ComboBox控件
    • 控件使能
    <ComboBox x:Name="ComboType" HorizontalAlignment="Left" Margin="220,77,0,0" VerticalAlignment="Top" Width="240"/>
    // 背景代碼        
    ComboType.IsEnabled = false;
               
    • 擷取目前選中序号
    • combobox插入項并標明預設項
    ComboType.Items.Add("超級管理者");
    ComboType.Items.Add("管理者");
    ComboType.Items.Add("工程師");
    ComboType.Items.Add("操作員");
    ComboType.Items.Add("訪客");
    // 設定預設選中項
    ComboType.SelectedIndex = 3;
               
    • 清除所有項
    • 綁定枚舉類型—單向綁定1
    <Window x:Class="FlowFile.UIUser">
    	<ComboBox x:Name="ComboType" SelectedItem="{Binding Path=ECurType,Mode=TwoWay}" />
    </Window>
    
    // 背景代碼
    // 需要顯示在combobox下拉清單中的項
    public enum EUserType
    {
        超級管理者,
        管理者,
        工程師,
        操作員,
        訪客
    }
    public partial class UIUser : Window, INotifyPropertyChanged
    {
    	private EUserType m_eCurType;           // 目前使用者等級
    	public EUserType ECurType { get => m_eCurType; set { m_eCurType = value; OnPropertyChanged("ECurType"); } }
    	// 雙向綁定
    	public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string strName)
        {
           PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strName));
        }
    	public UIUser()
    	{
    		ComboType.ItemsSource = System.Enum.GetValues(typeof(EUserType));
    	}
    }
               
    運作效果:
    C# WPF控件小結---ComboBox
    • 綁定枚舉類型—單向綁定2
    // EUnitType是一個枚舉型,m_SubType是ComboBox控件
    foreach (EUnitType item in EUnitType.GetValues(typeof(EUnitType)))
    {
    	m_SubType.Items.Add(item.ToString());
    }
               
    • 綁定枚舉類型—ObjectDataProvider雙向綁定
    <Window x:Class="FlowOther.LiquidInfo"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:FlowOther"
            xmlns:Lq ="clr-namespace:FlowConsumables;assembly=FlowConsumables"
            xmlns:System="clr-namespace:System;assembly=mscorlib"
            mc:Ignorable="d"
            Title="液體" Height="600" Width="800" WindowStartupLocation="Manual">
        
        <Window.Resources>
            <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
                <ObjectDataProvider.MethodParameters>
                    <x:Type TypeName="Lq:ELiquidType"/>
                </ObjectDataProvider.MethodParameters>
            </ObjectDataProvider>
        </Window.Resources>
    
        <Grid>
            <DockPanel>
                <Grid DockPanel.Dock="Top" Height="135">
                    <Label  Content="液體類型:" Margin="60,15,662,90"/>
                    <ComboBox Name="m_CmbType" SelectedItem="{Binding Path=ELqType, Mode=TwoWay}" ItemsSource="{Binding Source={StaticResource dataFromEnum}}" Margin="135,15,377,90"/>
                    <Label  Content="廠商名:" Margin="70,55,662,50"/>
                    <TextBox  Text="{Binding StrFacName,Mode=TwoWay}" Margin="135,55,377,50"/>
                    <Label  Content="自定義名:" Margin="55,90,662,15"/>
                    <TextBox  Text="{Binding StrDefName,Mode=TwoWay}" Margin="135,95,377,10"/>
                </Grid>
    
                <Grid Height="40" DockPanel.Dock="Bottom" >
                    <Button Width="80" Height="30" Margin="142,5,370,5" Content="确定" Click="OnClickOK"/>
                    <Button Width="80" Height="30" Margin="377,5,135,5"  Content="取消" Click="OnClickCancel"/>
                </Grid>
                <StackPanel Grid.Row="1" x:Name="m_Liquid"/>
    
            </DockPanel>
        </Grid>
    </Window>
               
    背景代碼:
    // 枚舉類型定義
    namespace FlowConsumables
    {
        // 液體類型
        public enum ELiquidType
        {
            樣品液,
            稀釋液,
            清洗液
        }
    }
               
    using FlowConsumables;
    using System.ComponentModel;
    namespace FlowOther
    {
        /// <summary>
        /// LiquidInfo.xaml 的互動邏輯
        /// </summary>
        public partial class LiquidInfo : Window, INotifyPropertyChanged
        {
            private ELiquidType m_eLqType;      // 類型
    		public ELiquidType ELqType { get => m_eLqType; set { m_eLqType = value; OnPropertyChanged("ELqType"); } }
    
    		public event PropertyChangedEventHandler PropertyChanged;
    		protected void OnPropertyChanged(string strName = null)
    		{
        		PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strName));
    		}
    }
               
    運作效果:
    C# WPF控件小結---ComboBox
    說明:
    • ObjectType="{x:Type System:Enum}",其中System是定義在 < xmlns:System=“clr-namespace:System;assembly=mscorlib”>的量。同理,<x:Type TypeName=“Lq:ELiquidType”/>中的“Lq”也是從其他項目包括過來的。
    • <ComboBox Name=“m_CmbType” SelectedItem="{Binding Path=ELqType, Mode=TwoWay}" ,path變量要用視窗上下文中的枚舉對象指派(本例中的m_eLqType,使用其屬性ELqType )。
    • 注意:ObjectDataProvider MethodName=“GetValues” 方法名要寫對,出現過兩次綁定失敗是由方法名寫錯導緻的。
    • 拓展:同樣的綁定方式可用于ListBox控件