如何在C#中创建自定义UserList控件?

时间:2015-12-01 18:47:39

标签: c# wpf winforms custom-controls

我正在制作聊天程序,我需要一个支持图标,名称,横幅,状态图标的UserList控件。

这是我要克隆的UserList的图片:

enter image description here

如您所见,用户名出现在背景图像的顶部。

远处的状态显示为管理员为红色,成员为黄色等等。

还有2个状态图标出现在管理员/成员状态之前,它们显示用户是否接受私人聊天/消息,这是一张照片:

enter image description here

如您所见,UserList可以包含普通(非横幅状)图标以及聊天/下午状态。

UserList必须像任何普通的listview类型控件一样滚动。

那么有人可以告诉我如何在C#winforms或wpf中生成这个控件吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

如果您使用的是WPF,请从ListView开始,并将视图设置为GridView。 然后设置列和单元格模板。 绑定属性。

<ListView Margin="10" Name="lvUsers" ItemsSource="{Binding Users}">
     <ListView.View>
        <GridView>
           <GridViewColumn Header="Name">
              <GridViewColumn.CellTemplate>
                 <DataTemplate>
                    <Grid>
                       <Image Source="{Binding UserIcon}"/>
                       <TextBlock Text="{Binding Name}" Margin="20,0,0,0" />
                    </Grid>
                 </DataTemplate>
              </GridViewColumn.CellTemplate>
           </GridViewColumn>
           <GridViewColumn Header="Status">
              <GridViewColumn.CellTemplate>
                 <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                       <Image Source="{StaticResource PrivateChatImage}" Visibility="{Binding IsPrivateChat, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                       <Image Source="{StaticResource PrivateMessImage}" Visibility="{Binding IsPrivateMess, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                       <Image Source="{Binding StatusIcon}"/>
                    </StackPanel>
                 </DataTemplate>
              </GridViewColumn.CellTemplate>
           </GridViewColumn>
        </GridView>
     </ListView.View>
  </ListView>

答案 1 :(得分:0)

非常感谢您试图帮助您。

但我设法通过自定义绘制所有内容来解决问题。

这是最终结果 http://q67.imgup.net/Untitledeb8d.png

基本上我做的是创建一个WinForms UserControl然后添加一个userList类,以便它挂钩到OnPaint()然后循环并吸引用户。

它工作得相当好,然后我用名称和状态为它制作了一个标题,然后我让分离器可以移动它(因为它上面绘制它必须是所有手动的东西)。它正确地将光标设置为分割器。

在完成之后,我需要一种方法来了解一个人点击的用户,但这只是一个简单的直接搜索。

在完成之后我需要一个有效的滚动,所以我将用户绘画移动到一个继承SplitterControl的新类我相信然后我根据列表中有多少用户设置它的滚动大小*元素有多大等。

总而言之,这个用户列表似乎与我试图克隆的用户列表一样好。

所以一切都很好!。