C# skype的';联系人列表';?
嘿,所以我想知道skype在联系人列表中使用了什么C# skype的';联系人列表';?,c#,wpf,user-interface,skype,uielement,C#,Wpf,User Interface,Skype,Uielement,嘿,所以我想知道skype在联系人列表中使用了什么UIElement,以便在每个列表项中显示额外的细节(例如状态更新,化身,在线状态等等) (来源:) 据我所知,常规的System.Windows.Forms.ListBox只允许显示一行文本来表示该对象 (来源:) 我想重新创建一些类似的东西,但目的不同,但我在谷歌上找不到太多东西(因此,我想看看这里是否有人有过修改列表框设计的经验,以便更好地了解每个细节) 谢谢这里是一个为WPF创建自定义数据模板的非常基本的示例 首先,使用所有要显示的属
UIElement
,以便在每个列表项中显示额外的细节(例如状态更新
,化身
,在线状态
等等)
(来源:)
据我所知,常规的System.Windows.Forms.ListBox
只允许显示一行文本来表示该对象
(来源:)
我想重新创建一些类似的东西,但目的不同,但我在谷歌上找不到太多东西(因此,我想看看这里是否有人有过修改列表框设计的经验,以便更好地了解每个细节)
谢谢这里是一个为WPF创建自定义数据模板的非常基本的示例
首先,使用所有要显示的属性创建模型
,然后将它们的列表绑定到列表框
。然后,您可以创建DataTemplate
这基本上是Model的xaml(视觉)表示,您可以使其看起来任意,并且可以使用Model中的任何属性
例如:
窗口代码:
public partial class MainWindow : Window
{
private ObservableCollection<MyListBoxItemModel> _listBoxItems = new ObservableCollection<MyListBoxItemModel>();
public MainWindow()
{
InitializeComponent();
ListBoxItems.Add(new MyListBoxItemModel { Title = "Item 1", Image = new BitmapImage(new Uri("http://icons.iconarchive.com/icons/custom-icon-design/mini/32/Search-icon.png")) });
ListBoxItems.Add(new MyListBoxItemModel { Title = "Item 2", Image = new BitmapImage(new Uri("http://icons.iconarchive.com/icons/custom-icon-design/mini/32/Search-icon.png")) });
ListBoxItems.Add(new MyListBoxItemModel { Title = "Item 3", Image = new BitmapImage(new Uri("http://icons.iconarchive.com/icons/custom-icon-design/mini/32/Search-icon.png")) });
}
public ObservableCollection<MyListBoxItemModel> ListBoxItems
{
get { return _listBoxItems; }
set { _listBoxItems = value; }
}
}
Xaml:
这只是一个带有图像
和一些文本的简单示例,但它应该可以帮助您开始,只需修改数据模板
和模型
您希望如何显示snp代码
数据
结果:
您是否肯定、绝对肯定Skype在您的平台上使用WPF?我不确定,这就是我问的原因。我想可能吧?但实际上我不确定。@Killrawr:1。是德尔福2。这绝对是一个自定义控件。当你实现自定义控件时,这其实并不罕见,尤其是当你是一个skype程序时。这根本不是“修改设计”,而是从头开始实现一个全新的控件。你只需创建自己的ListBoxItem
,它可以在任何地方显示图像和标签,非常简单,你在找什么样的WPF或Winforms,我不介意模仿一个。谢谢,你知道如何在Text=”“
Setter中添加
吗?你说的换行是什么意思?新线?您可以只添加一个新的TextBlocl或在现有TextBlock上使用多绑定您介意使用多绑定来更新答案吗?(显示一个项目,例如项目2.1
下的项目2
)。再次感谢!:)更新了数据模板和模型以显示TextBlockHey sa_ddam213上的多重绑定,非常感谢。我想知道您如何将项目2
和项目2.1
之间的样式区分开来?
public class MyListBoxItemModel : INotifyPropertyChanged
{
private string _title;
private string _line2 = "Line2";
private BitmapImage _image;
public string Title
{
get { return _title; }
set { _title = value; NotifyPropertyChanged("Title"); }
}
public string Line2
{
get { return _line2; }
set { _line2 = value; NotifyPropertyChanged("Line2"); }
}
public BitmapImage Image
{
get { return _image; }
set { _image = value; NotifyPropertyChanged("Image"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string p)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
}
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication7"
Title="MainWindow" Height="351" Width="464" Name="UI" >
<Window.Resources>
<!-- The tempate for MyListBoxItemModel -->
<DataTemplate DataType="{x:Type local:MyListBoxItemModel}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Image}" />
<StackPanel>
<TextBlock Text="{Binding Title}" FontWeight="Medium" />
<TextBlock Text="{Binding Line2}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding ElementName=UI, Path=ListBoxItems}" />
</Grid>
</Window>