دسته بندی ها
12:44 1398/10/22

ایجاد کمبوباکس با قابلیت جستجو در wpf

مشخصات سوال کننده :
کاربر : Nori     امتیاز کاربر : 72     رتبه کاربر : 15
دسته بندی : WPF

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 3307
پاسخ دهنده : hamid_b 14:59 1398/10/22

سلام

میتونید توی گوگل سرچ کنید و نتایج خوبی رو بهتون نمایش میده. اما این کدها رو براتون قرار میدم امیدوارم بتونید استفاده کنید

 

کدهای مربوط به بخش دستورات xaml

 

<Window x:Class="InterviewApplication.MainWindow"
        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"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="350"
        Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <WrapPanel Orientation="Horizontal">
        <ComboBox IsEditable="True"
                  Width="200"
                  Height="25"
                  IsTextSearchEnabled="False"
                  x:Name="cb"
                  PreviewTextInput="Cb_OnPreviewTextInput"
                  ItemsSource="{Binding ItemList}"
                  Text="{Binding SearchTextText}">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel />
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
        </ComboBox>
    </WrapPanel>
</Window>

 

و کدهای سمت سرور شما کدهای زیر میشن

 

namespace Application
{
    public partial class MainWindow : INotifyPropertyChanged
    {
        public MainWindow()
        {
            ItemList = new ObservableCollection<string>();
            for (var i = 0; i < 1000; i++)
            {
                ItemList.Add($"Item {i}");
            }

            InitializeComponent();
        }

        private void Cb_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            cb.IsDropDownOpen = true;
        }

        public ObservableCollection<string> ItemList { get; set; }

        public string SearchTextText
        {
            get => _searchTextText;
            set
            {
                if (_searchTextText == value) return;
                _searchTextText = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SearchTextText)));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

 

با استفاده از دستورات بالا می تونید یک کمبوباکس با قابلیت جتسجو در wpf ایجاد کنید. خروجی کار هم مشابه زیر میشه

 

کمبوباکس با قابلیت جستجو

به این پاسخ امتیاز بدهید    0
امتیاز: 510 رتبه: 4
پاسخ دهنده : pedram_khan 20:30 1398/10/22

به صورت پیش فرض Combobox خودش قابلیت جستجو رو داره. شما کمبوباکس خودتون رو انتخاب کنید و یک کلمه رو سرچ کنید میبینید که خودش میره و سر اون item وایمیسه . کد زیر رو دقت کنید.

 

<ComboBox x:Name="cmb_status" IsTextSearchEnabled="True" ></combobox>

 

اما اگر میخواید وقتی کمبوباکس رو باز می کنید یک تکست باکس نمایش داده بشه که اطلاعات رو فیلتر کنه و فقط اطلاعات فیلتر شده رو نمایش بده باید از یک کامپوننت استفاده کنید چون به صورت پیش فرض در WPF چنین چیزی وجود نداره. برای این منظور میتونید این لینک رو مطالعه بفرمایید.

اگر هم که استفاده از پکیج های nuget رو توی wpf بلد هستید می تونید از این پکیج برای این کار استفاده کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: 277 رتبه: 6
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود