ComboBox Color ala WPF

Posted at : Sep/23/2008
6025 Views

Di posting terdahulu saya pernah ber coding ria untuk membuat Combobox yang berisi list predefined color beserta kotak berwarna yang memiliki warna yang sesuai dengan nama warna yang muncul di Combobox list tersebut. Saya tidak akan menjelaskan kembali teknik tersebut. Kali ini saya akan ber coding ria lagi untuk membuat object yang serupa namun dibuat dengan menggunakan WPF.

Seperti yang kita ketahui semua, di WPF banyak sekali cool stuff yang dapat membuat tampilan lebih cantik dan wah. Selain itu ada beberapa teknik yang dipermudah dalam melakukan action tertentu, seperti misalnya penggunaan object graphics, bitmap effect, dll. Di WPF juga dikenal adanya Control Template. Template control ini sebelumnya mungkin kita kenal di asp.net. Pernah menggunakan Data Display Control seperti DataList, Repeater atau mungkin GridView? Ya seperti itulah kira-kira yang dapat kita lakukan juga di WPF. Ok mari kita lihat langkah-langkahnya:

Pertama kali sudah pasti anda harus buat terlebih dahulu WPF Application project templatenya dari Visual Studio kesayangan anda. Disini saya menggunakan VS 2008. Buat code seperti di bawah ini pada Window1.xaml untuk interfacenya :

 

   1: <Window x:Class="Window1"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     Title="Window1" Height="300" Width="350">
   5:     <Grid>
   6:         <StackPanel Margin="10,10,10,10" Orientation="Horizontal"
   7:                     VerticalAlignment="Top">
   8:             <ComboBox Width="310" Height="40" Name="cboColor">
   9:                 <ComboBox.ItemTemplate>
  10:                     <DataTemplate>
  11:                          <StackPanel Orientation="Horizontal">
  12:                             <Label Width="175" Height="Auto"
  13:                                    Content="{Binding Path={}}"
  14:                                    FontSize="14" >
  15:                                 <Label.BitmapEffect>
  16:                                     <DropShadowBitmapEffect
  17:                                         ShadowDepth="10" />
  18:                                 </Label.BitmapEffect>
  19:                             </Label>
  20:                             <Label Width="Auto" Height="Auto"
  21:                                    Content=" : "
  22:                                    FontSize="14"  />
  23:                             <Label Width="50" Height="20"
  24:                                    Background="{Binding Path={}}" >
  25:                                 <Label.BitmapEffect>
  26:                                     <DropShadowBitmapEffect />
  27:                                 </Label.BitmapEffect>
  28:                             </Label>
  29:                         </StackPanel>
  30:                     </DataTemplate>
  31:                 </ComboBox.ItemTemplate>
  32:             </ComboBox>
  33:         </StackPanel>
  34:     </Grid>
  35: </Window>

 

Saya menggunakan StackPanel sebagai layout. Combobox yang digunakan sudah tidak standard lagi. Disini digunakan template untuk menampilkan nama warna pada control label dan juga warnanya itu sendiri yang juga di render pada control label. Untuk membuat template seperti di atas, anda cukup memanggil <xxx.ItemTemplate> element. Dimana xxx tersebut bergantung pada control yang kita gunakan. Untuk mendefinisikan datanya digunakan <DataTemplate>. Di dalam DataTemplate element tersebut anda bebas mau merender apapun dengan control yang diingikan.

Hal yang harus diperhatikan yaitu penggunaan perintah {Binding Path={}}. Perintah ini digunakan sebagai DataBinding. DataSource nya dapat kita definisikan secara runtime. Atribut Path diisi dengan nama member yang terdapat di dalam data source yang digunakan. Apabila anda lihat di atas, Path atribut yang terdapat di dalam {Binding Path={}} diisi dengan {}. Artinya tidak terdapat nama member yang digunakan, karena disini saya menggunakan enumerasi warna yang terdapat di dalam .net framework. Kecuali di dalam data source tersebut terdapat nama member yang akan digunakan sebagai DisplayMemberPath, seperi misalnya member CompanyName kalau data source diisi dengan data Customer table yang terdapat di dalam database Northwind.

Pada code diatas terdapat penggunaan <Label.BitmapEffect>. Element ini digunakan untuk membuat effect pada object tersebut, salah satunya seperti DropShadow. Dengan DropShadow ini, maka object tersebut akan memiliki bayangan. Jarak antara object aslinya dengan bayangan dapat kita atur dengan menggunakan atribut ShadowDepth yang anda isi dengan angka tertentu.

Label control terakhir yang terdapat di dalam DataTemplate digunakan untuk menampilkan kotak berwarna. Pengaturannya dilakukan terhadap properti Background. Sehingga warna background yang tampil akan sesuai dengan nama warnanya.

Sekarang kita tambahkan sedikit code pada event window loaded di code behind Window1.xaml :

   1: Private Sub Window1_Loaded(ByVal sender As Object, _
   2:                            ByVal e As System.Windows.RoutedEventArgs) _
   3:                            Handles Me.Loaded
   4: 
   5:     Me.cboColor.ItemsSource = _
   6:     From c In [Enum].GetNames(GetType(System.Drawing.KnownColor))
   7: 
   8: End Sub

Kode diatas digunakan untuk membuat data source yang diambil dari enumerasi predefined Color, yang akhirnya digunakan pada Combobox dengan set properti ItemsSourcenya terhadap object yang dihasilkan dari Query Expression diatas. O ya sebelumnya anda harus melakukan referensi terlebih dahulu terhadap System.Drawing library. Mari kita lihat screen shotnya :

Anda juga dapat merubah color fontnya dengan warna yang sesuai dengan nama warnanya, caranya simple, seperti yang dilakukan terhadap label object untuk menampilkan kotak warna diatas. Cukup rubah dengan code seperti dibawah ini :

   1: <ComboBox Width="310" Height="40" Name="cboColor">
   2:     <ComboBox.ItemTemplate>
   3:         <DataTemplate>
   4:              <StackPanel Orientation="Horizontal">
   5:                 <Label Width="175" Height="Auto"
   6:                        Content="{Binding Path={}}"
   7:                        FontSize="14"
   8:                        Foreground="{Binding Path={}}">

Ok...cukup dengan mengatur properti Foreground yang di set ke perintah Binding maka hasilnya akan berubah seperti ini:

Cukup segitu aja dulu untuk kali ini... :)

 


ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Co-Founder & IT Trainer at Native Enterprise | Microsoft Azure Data Scientist | IBM RAG & Agentic AI | IBM Data Science & Data Analyst | Python Certified (PCEP, PCAP) | MOS, MTA, Xamarin Certified, ex MCT | ex MVP

CERTIFICATIONS

Microsoft Certified Associate
IBM RAG and Agentic AI Professional
IBM Data Science Professional IBM Data Analyst Professional
PCAP Associate Python Programmer Certified PCEP Entry Level Python Programmer Certified
Xamarin Certified
MOS 2007
MCPD MCTS
MCAD.NET

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2026   Rully Yulian MF   All rights reserved.