我在ItemsControl中有一个ObservableCollection绑定。在此ItemsControl中创建一些文本框,每个ObservableCollection中的对象对应一个文本框。
现在,我需要选择文本并将其突出显示,具体取决于所选对象,但是我无法做到这一点。
我的xaml:
<StackPanel x:Name="stackPanel">
<StackPanel.Children>
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding MyCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding MyContent}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel.Children>
</StackPanel>
这是我的代码,被一个事件调用:
for (int i = 0; i < this.stackPanel.Children.Count; i++)
{
TextBox t = this.stackPanel.Children[i] as TextBox;
if (t != null)
{
// do selection
}
}
// and also in this way:
for (int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
TextBox t2 = (uiElement as TextBox);
if (t2 != null)
{
// do selection
}
}
如何获取这些文本框? 谢谢。
答案 0 :(得分:0)
以下代码选择索引为i
的一个文本框:
ContentPresenter c = (ContentPresenter)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
TextBox t2 = c.ContentTemplate.FindName("textboxName", c) as TextBox;
if (t2 != null)
{
t2.Focus();
t2.SelectAll();
}
您必须用xaml命名文本框:
<TextBox x:Name="textboxName" ....
请注意,一次最多只能聚焦1个元素,因此无法以这种方式突出显示所有元素。您必须手动更改突出显示的文本颜色(通过绑定或代码)