Запретить WPF ListView или ListBox показывать "половину" элементов - PullRequest
5 голосов
/ 18 мая 2011

в нашем приложении у нас есть несколько ListViews и ListBoxes внутри сетки, где вы можете изменить фактическую высоту элемента управления с помощью разделителя сетки. При этом вы можете настроить высоту ListBox так, чтобы один из элементов не был полностью виден, потому что ListView становится коротким для его отображения.

Такое поведение нам не нужно.

Из моих исследований до сих пор кажется, что нет способа предотвратить показ ListBox или ListView частичных элементов, но, возможно, кто-то нашел другой способ решения этой проблемы. Может быть, предмет может срабатывать невидимым, когда он виден только наполовину. Но как мы можем узнать?

Мы открыты для любых предложений.

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Я не знаю, как исправить ListView таким способом. Однако для ListBox вы можете переопределить ArrangeOverride и упорядочить элементы самостоятельно. Сложите элементы, которые вы хотите видеть, и расположите элементы, которые вы не хотите видеть (например, частично видимые элементы), так, чтобы они не были видны. Например, не виртуализированная версия:

    /// <summary>
    /// Used to arrange all of the child items for the layout.
    /// Determines position for each child.
    /// </summary>
    /// <param name="finalSize">Parent passes this size in</param>
    /// <returns>Parent size (always uses all of the allowed area)</returns>
    protected override Size ArrangeOverride(Size finalSize)
    {
        // Arrange in a stack
        double curX = 0;
        double curY = 0;
        foreach (UIElement child in InternalChildren)
        {
            double nextY = curY + child.DesiredSize.Height;
            if (nextY > finalSize.Height)         // Don't display partial items
                child.Arrange(new Rect());
            else
                child.Arrange(new Rect(curX, curY, child.DesiredSize.Width, child.DesiredSize.Height);
            curY = nextY;
        }

        return finalSize;
    }
0 голосов
/ 18 мая 2011

Вам просто нужно установить MinHeight или MinWidth для ячейки, размер которой вы изменяете. Попробуйте это:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="50"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition MinHeight="50"/>
        </Grid.RowDefinitions>
        <ListBox HorizontalAlignment="Center" Margin="10">
            <ListBoxItem>First</ListBoxItem>
            <ListBoxItem>Second</ListBoxItem>
            <ListBoxItem>Third</ListBoxItem>
            <ListBoxItem>Fourth</ListBoxItem>
        </ListBox>
        <GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        <ListView Grid.Row="2" Margin="4">
            <ListViewItem>First</ListViewItem>
            <ListViewItem>Second</ListViewItem>
            <ListViewItem>Third</ListViewItem>
            <ListViewItem>Fourth</ListViewItem>
        </ListView>
    </Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...