質問

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] は機能しないと思いますか?

私はおかしくありませんし、自分でチェックしていません-それは私の最初の推測です。ほとんどの場合、コントロールは、データバインドされていても、アイテムのインデクサープロパティを持ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top