ListView с вложенным Расширителем, не выходящим из строя

Я всегда задавался вопросом, что сам, именно поэтому что я всегда ношу это со мной:

public static void ForEach<T>(this IEnumerable<T> col, Action<T> action)
{
    if (action == null)
    {
        throw new ArgumentNullException("action");
    }
    foreach (var item in col)
    {
        action(item);
    }
}

Миленький дополнительный метод.

7
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Found the solution, and it details where in the question already.

ItemControl accepts an ItemsSource and auto resizes. So replacing the two ListViews with ItemControls gets the nested collapsing.

But there is no scrolling, so wrapping the outer ItemControl with a ScrollViewer, reproduces the complete desired effect.

<ScrollViewer
    VerticalScrollBarVisibility="Auto">
    <ItemsControl>
        <!-- ParameterGroupView -->
        <Border
            BorderBrush="Brown"
            BorderThickness="1"
            CornerRadius="4"
            Padding="4"
            Height="Auto">
            <ItemsControl
                HorizontalContentAlignment="Stretch">
                <Expander
                    Header="Expander A"
                    IsExpanded="False">
                    <ItemsControl
                        HorizontalContentAlignment="Stretch">
                        <!-- TextView -->
                        <TextBlock>Content A</TextBlock>
                        <TextBlock>Content B</TextBlock>
                    </ItemsControl>
                </Expander>
            </ItemsControl>
        </Border>
    </ItemsControl>
</ScrollViewer>

I was testing with double Expanders in the Border and double Border sections.

4
ответ дан 7 December 2019 в 10:03
поделиться

Наиболее очевидная вещь, которую нужно сделать здесь, - это поместить расширители в контейнер, отличный от списка:

<Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <StackPanel>

        <Expander Header="Expander A" IsExpanded="False">
            <ListView HorizontalContentAlignment="Stretch" MinWidth="100">
                <ListBox Name="listb"></ListBox>

                <!-- TextView -->
                <TextBlock >Content A</TextBlock>
                <TextBlock>Content B</TextBlock>

            </ListView>
        </Expander>
    </StackPanel>
</Border>

Контейнер легко меняет размер вокруг содержимого.

Если вам абсолютно необходимо иметь его в ListView (что возможно), то я не знаю способа заставить ListView легко изменять размер после того, как он вырос (помимо указания явных размеров всего объекта, что неуклюже и неуклюже. не полезно). Если это так, то, возможно, вам придется использовать управляемый список для отображения всех открытых расширителей или отображать контент другим способом (например, во всплывающем окне?), Если вы хотите иметь возможность его видеть все сразу.

2
ответ дан 7 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: