C# WPF 取得listview中的自定selectItem

  • 5106
  • 0

摘要:C# WPF 取得listview中的自定selectItem

我一直很不會操作listView。

但是沒想到看到別人(英討)的文章,才一語驚醒夢中人!

 

不知道大家會不會在listview中加入自己設定的樣式?

 

舉例:

我想要在listview加上有label又有文字等等一拖拉庫的功能,

那麼就先建立新的使用者元件,

我的是WPF,所以大概長這樣:


    <Grid>
        <Label Content="Default Text" Height="28" HorizontalAlignment="Left" Margin="30,0,0,0" Name="lbName" VerticalAlignment="Top" Width="157" HorizontalContentAlignment="Right" />
        <Image Height="26" HorizontalAlignment="Left" Name="imgIcon" Stretch="Fill" VerticalAlignment="Top" Width="26" Source="/Images/ICON01.png" />
    </Grid>

 

當然你喜歡可以塞很多東西。

接著在裡面設定一些東西做每個Item的識別:

 


        public listItem(string name, string img, string id)
        {
            InitializeComponent();
            if (name != "")
                lbName.Content = name;
            if (img != "")
                imgIcon.Source = new BitmapImage(new Uri("./Images/" + img, UriKind.Relative));
            else
                imgIcon.Visibility = Visibility.Hidden;
            if (id != "")
                this.Name = id;
            if (id == "test")
            {
                TextBlock tb = new TextBlock();
                tb.Text = name;
                TextDecorationCollection tdc = new TextDecorationCollection();
                TextDecoration underline = new TextDecoration(); // underline is the default
                tdc.Add(underline);
                tb.TextDecorations = tdc;
                lbName.Content = tb;
            }
        }

這就是自定的item~(名字叫listItem)

他的建構子是說給他label的內容、圖片名稱、id。
id就是用來區分item也就是為元件命名的Name,
就像我們需要使用自己拉出來的Btton名叫btnName,改Button的label就是btnName.label="test";這樣。
順便演示了一下如何在label加底線XDDD

那麼要怎麼塞進你的LISTVIEW呢?
也很簡單~
建立listview:
 


 <ListView Height="454" HorizontalAlignment="Left" Margin="2,69,0,0" Name="lvTest" VerticalAlignment="Top" Width="201" BorderThickness="2" BorderBrush="#FFB4B4B4" Background="#FFD1D1D1" SelectionChanged="lvTest_SelectionChanged" />

怎麼看起來很醜!?
其實沒多做什麼,只是將他美觀一下,最主要的是Name以及加入事件SelectionChanged

再來,在程式碼寫這樣:


                                listItem test= new listItem("我可愛的label", "icon.jpg", "tests");
                                lvTest.Items.Add(test);

現在運行程式後,你應該可以看到一個listView有你的listItem了~

類似這樣:

 

雖然長得很醜......但是只要把listItem做得好,那麼就會很方便而好用(其實只是沒用上美工而已)~

接著就是這次文章的主題,來到SelectionChanged的事件後,

加入:


        private void lvTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lvTest.SelectedItem != null)
            {
                listItem select = lvTest.SelectedItem as listItem;
                if (select.Name == "tests")
                    MessageBox.Show("123");
            }
        }

 

嗯~到這就結束了。我知道看起來很簡單......

但這東西我想了好久Orz

這樣你的listview就逃不出你的魔掌,

你想要怎麼操作都ok了~

 

舉例來說,如果你想要將點到的東西加入超連結,可以在listItem中再加入連結的參數,
也或者透過Name來做判斷點到哪個東西,點到後要做什麼。

 

SV這個月份的分享似乎只有這個,就先下台一鞠躬囉~