【问题标题】:Finding Listbox Index of ListBoxItem (ItemsTemplate to specify Visual COntent)查找 ListBoxItem 的 Listbox 索引(ItemsTemplate 指定视觉内容)
【发布时间】:2013-08-23 00:25:32
【问题描述】:

如果在 DataTemplate 中将 ListBoxItem 设置为 Textbox 控件,如何找到它的索引?这是 WPF:

<ListBox Name="ScriptEditor" Margin="10" Height="291" ItemsSource="{Binding Path=Script}"    SelectionChanged="ScriptEditor_SelectionChanged_1" >
       <ListBox.ItemTemplate>
            <DataTemplate>
                 <TextBox Text="{Binding Path=Command}"PreviewMouseDoubleClick="Command_DoubleClick" GotFocus="ScriptEditor_GotFocus" />
           </DataTemplate>
      </ListBox.ItemTemplate>
 </ListBox> 

当我获得文本框的焦点(文本绑定到 observableCollection)时,我不能简单地在 ListBox 上使用 SelectionChanged 事件。我想知道如何确定我获得焦点的文本框的索引。

谢谢

【问题讨论】:

    标签: c# wpf binding listbox listboxitems


    【解决方案1】:

    您可以将AlternationCount 绑定到Script.Count,然后将AlternationIndexItemsControl(ListBox) 添加到Textbox Tag 属性,这样您就可以从GotFocus 事件处理程序进行访问。

    例子:

        <ListBox Name="ScriptEditor" Margin="10" Height="291" ItemsSource="{Binding Script}" AlternationCount="{Binding Script.Count}" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding ., Mode=OneWay}" GotFocus="ScriptEditor_GotFocus"
                             Tag="{Binding Path=(ItemsControl.AlternationIndex), Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    
    
        private void ScriptEditor_GotFocus(object sender, RoutedEventArgs e)
        {
            int index = (int)(sender as TextBox).Tag;
        }
    

    【讨论】:

    • 太棒了,做到了!
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多