摘要: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這個月份的分享似乎只有這個,就先下台一鞠躬囉~