Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# skype的';联系人列表';?_C#_Wpf_User Interface_Skype_Uielement - Fatal编程技术网

C# skype的';联系人列表';?

C# skype的';联系人列表';?,c#,wpf,user-interface,skype,uielement,C#,Wpf,User Interface,Skype,Uielement,嘿,所以我想知道skype在联系人列表中使用了什么UIElement,以便在每个列表项中显示额外的细节(例如状态更新,化身,在线状态等等) (来源:) 据我所知,常规的System.Windows.Forms.ListBox只允许显示一行文本来表示该对象 (来源:) 我想重新创建一些类似的东西,但目的不同,但我在谷歌上找不到太多东西(因此,我想看看这里是否有人有过修改列表框设计的经验,以便更好地了解每个细节) 谢谢这里是一个为WPF创建自定义数据模板的非常基本的示例 首先,使用所有要显示的属

嘿,所以我想知道skype在联系人列表中使用了什么
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>