可以通过observablecollection类或xaml填充,如下所示:
<TextBox Name="tb" Text="DroplistBox" Width="140" Height="30"></TextBox>
<ListBox Name="lb" Width="150" Height="200" SelectionMode="Single">
<ListBoxItem>
<TextBox Text="1" Width="140" Height="30"></TextBox>
</ListBoxItem>
<ListBoxItem>
<TextBox Text="2" Width="140" Height="30"></TextBox>
</ListBoxItem>
<ListBoxItem>
<TextBox Text="3" Width="140" Height="30"></TextBox>
</ListBoxItem>
<ListBoxItem>
<TextBox Text="4" Width="140" Height="30"></TextBox>
</ListBoxItem>
</ListBox>
所以我的问题是,如何在我自己的控件中复制它?所以基本上我不确定如何解析ListBox中存在的ListBoxItem。是一种我应该寻找的List FindChildren(字符串名称)类型函数吗?
我在福森的回答的帮助下解决了这个问题,如果有人感兴趣的话,这就是我所做的要点,因为在我对福森的答案的评论中我无法解释清楚自己:
[ContentProperty( "Items" )]
public class ControlWithChildReader : Control
{
List<object> m_objects = new List<object>( );
public object Items
{
get
{
return m_objects[ 0 ]; //probably not needed haha
}
set
{
m_objects.Add( value );
}
}
答案 0 :(得分:2)
在处理控件内部的模板和控件时,这可能会有所帮助。请考虑以下XAML:
XAML
<ListBox Name="lb" Width="150" Height="200" SelectionMode="Single">
<ListBoxItem>
<TextBox Text="1" Width="140" Height="30"></TextBox>
</ListBoxItem>
<ListBoxItem>
<TextBox Text="2" Width="140" Height="30"></TextBox>
</ListBoxItem>
<ListBoxItem>
<TextBox Text="3" Width="140" Height="30"></TextBox>
</ListBoxItem>
<ListBoxItem>
<TextBox Text="4" Width="140" Height="30"></TextBox>
</ListBoxItem>
</ListBox>
如果你想在listboxitems中获取文本框:
如果有一个已取消的列表框项,并且您想要访问其中的TextBox:
ListBoxItem item1 = lb.SelectedItem;
Textbox tb1 = item1.GetVisualDescendants().OfType<TextBox>().FirstOrDefault() as TextBox;
如果您想在整个列表框中获取所有文本框:
List<Textbox> tbCollection = lb.GetVisualDescendants().OfType<TextBox>().ToList();
您也可以尝试使用:
GetVisualAncestors(); - Gets all anscestor controls(parent of parent of the item)
GetVisualChildren(); - Gets all controls inside a controls which are in the control
GetVisualSiblings(); - Gets all controls that share the same parent with the control
答案 1 :(得分:2)
您可以通过在集合中放置以下属性来复制ItemsControl exibits的行为
[ContentProperty("Items", true)]
这会将XAML内容添加到Items集合属性。
答案 2 :(得分:1)
您可以通过继承ItemsControl获取此功能,然后通过Items属性访问子项。