6
如何獲得視覺樹中元素的下一個兄弟?這個元素是數據項ItemsSource的數據項。我的目標是獲取代碼中的同胞(假設我有權訪問元素本身),然後使用BringIntoView。如何獲得數據綁定物品控件中的項目的下一個兄弟?
謝謝。
如何獲得視覺樹中元素的下一個兄弟?這個元素是數據項ItemsSource的數據項。我的目標是獲取代碼中的同胞(假設我有權訪問元素本身),然後使用BringIntoView。如何獲得數據綁定物品控件中的項目的下一個兄弟?
謝謝。
例如,如果您的ItemsControl
是ListBox
,則元素將是ListBoxItem
對象。如果你有一個ListBoxItem
並且要在列表中的下ListBoxItem
,您可以使用ItemContainerGenerator
API找到這樣的:
public static DependencyObject GetNextSibling(ItemsControl itemsControl, DependencyObject sibling)
{
var n = itemsControl.Items.Count;
var foundSibling = false;
for (int i = 0; i < n; i++)
{
var child = itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
if (foundSibling)
return child;
if (child == sibling)
foundSibling = true;
}
return null;
}
這是一些示例XAML:
<Grid>
<ListBox Name="listBox">
<ListBoxItem Name="item1">Item1</ListBoxItem>
<ListBoxItem Name="item2">Item2</ListBoxItem>
</ListBox>
</Grid>
和代碼 - 背後:
void Window_Loaded(object sender, RoutedEventArgs e)
{
var itemsControl = listBox;
var sibling = item1;
var nextSibling = GetNextSibling(itemsControl, sibling) as ListBoxItem;
MessageBox.Show(string.Format("Sibling is {0}", nextSibling.Content));
}
導致:
如果ItemsControl
是數據綁定的,這也適用。如果你只有有數據項(不是相應的用戶界面元素),你可以使用ItemContainerGenerator.ContainerFromItem
API來獲得初始兄弟。
感謝您花時間給出完整答案! :) – Alexander 2011-06-01 03:03:07