2009-11-14 96 views
0

我想创建一个基本上是ListBox的控件,但每个ListItem都是一组控件。因此,该列表框中的每个项目都是Label,CheckBox,Timer和TextBox的组合。创建.NET自定义控件

这可以用.NET框架来完成吗?

如果是这样,您是否对如何入门,样本或讨论的任何链接或任何开源示例有任何建议?

+0

@Pradeep:因为你提到了一个Timer,所以我假定了WinForms。如果不正确,请为清晰起见进行编辑 – 2009-11-14 18:34:26

回答

0

这在WPF中非常容易 - 所以是的,它可能在.NET Framework中。 (你有WPF中的控件可以包含其他控件,如可以有标签复选框和文本框的面板,我不确定是否有定时器控件,但我确定它可以被编程)。

在Winforms中,它很难,使用grid和gridview而不是listbox可能会更容易,但是它有一些工作要做。

有商业控制 - 将使这个功能更容易实现。 (用于winforms的DevExpress Grid)

+0

@Dani 谢谢您的回复。 其实我有一个设备列表将被放置在列表框中,现在这个列表可以增长到任何扩展,所以我需要一个滚动条。面板,组框或其他容器控件中没有滚动条。 – Pradeep 2009-11-14 18:48:48

+0

有一种方法可以将滚动条添加到WPF。如果我记得正确的话,滚动控件应该包含面板。 WPF是一个选项吗? – Dani 2009-11-14 19:10:59

1

正如Dani所说,它在WPF中非常容易。为了让你了解它有多简单,下面是你如何使用Expression Blend设计器工具或使用代码:

如果你只是将一个ListBox拖到一个WPF窗口或UserControl上,然后在属性窗口中在ItemTemplate属性中选择“New Template”,你将得到一个带有自定义模板的ListBox。在模板中创建一个面板(如DockPanel),并将标签,复选框,文本框和其他控件拖放到它中。

遵循此过程中,设计师将创建XAML类似以下内容:

<ListBox ItemsSource="{Binding myItems}"> 

    <ListBox.ItemTemplate> 
    <DataTemplate TargetType="{x:Type MyItemType}"> 

     <DockPanel> 

     <Label Content="Hello:"/> 
     <CheckBox Content="Click Here" /> 
     <TextBox Text="Here is my text" /> 

     </DockPanel> 

    </DataTemplate> 

    </ListBox.ItemTemplate> 
</ListBox> 

或者,你可以只写XAML自己。用IntelliSense这么做简直太神奇了。

1

如果WPF不是您的选项,您可以使用DataGridView控件: DataGridViewCheckBoxColumn代表您的复选框,2代表DataGridViewTextBoxColumn代表Label和TextBox。您可以将网格的属性SelectionMode设置为FullRowSelect以选择整个行。同时检查网格的CellPainting事件;你可以在那里添加一些自定义绘画代码。