WPF:在ItemControl

时间:2018-06-19 15:05:55

标签: c# wpf itemscontrol

我在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
    }
}

如何获取这些文本框? 谢谢。

1 个答案:

答案 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个元素,因此无法以这种方式突出显示所有元素。您必须手动更改突出显示的文本颜色(通过绑定或代码)