ItemsControlの子にアクセスするにはどうすればよいですか?
-
05-07-2019 - |
質問
ItemsControl
から派生したコンポーネントがある場合、特定のアクションを実行するためにそれらをループできるように、その子のコレクションにアクセスできますか?現時点では簡単な方法を見つけることができないようです。
解決
Sebに似たソリューションですが、おそらくパフォーマンスが向上します:
for(int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
他のヒント
これが役立つかどうかを確認します。
foreach(var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
コントロールの論理項目と UIElement
には違いがあります。
ItemsControl
のデータバインドされた子コントロール( ToggleButton
など)を識別するには、これを使用できます:
for (int i = 0; i < yourItemsControl.Items.Count; i++)
{
ContentPresenter c = (ContentPresenter)yourItemsControl.ItemContainerGenerator.ContainerFromItem(yourItemsControl.Items[i]);
ToggleButton tb = c.ContentTemplate.FindName("btnYourButtonName", c) as ToggleButton;
if (tb.IsChecked.Value)
{
//do stuff
}
}
ItemsControl.Items [index]
は機能しないと思いますか?
私はおかしくありませんし、自分でチェックしていません-それは私の最初の推測です。ほとんどの場合、コントロールは、データバインドされていても、アイテムのインデクサープロパティを持ちます。
所属していません StackOverflow