WPF - список внутри Scrollviewer не будет прокручивать элементы - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть несколько UserControls внутри ListView.Каким-то образом WPF реализовал горизонтальную прокрутку даже без ScrollViewer.Когда я пытаюсь реализовать вертикальную прокрутку, ScrollViewer становится серым и непригодным для использования.Я попытался обернуть ListView в ScrollViewer, но он не будет прокручиваться.Даже если я удаляю ListView и только пытаюсь поместить StackPanel с текстовыми полями в него, ScrollViewer все еще отключен.Я что-то упускаю?

XAML:

<ScrollViewer VerticalScrollBarVisibility="Visible" CanContentScroll="True" 
Grid.Row="1" Grid.Column="1">
            <ListBox Margin="0,0,10,10" ItemsSource="{Binding Feeder}" 
Grid.RowSpan="3">
             <ListBox.ItemContainerStyle>
                 <Style TargetType="{x:Type ListBoxItem}">
                     <Setter Property="Focusable" Value="False"/>
                 </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <local:FeederControl FeederName="{Binding FeederName}" 
AxisList="{Binding AxisList}"></local:FeederControl>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
</ScrollViewer>

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

ListView / Listbox / Stackpanel: может расширяться в зависимости от размера его содержимого.

Обернуть ваш Listview / listbox в Grid с высотой "*" (не используйте "Auto" для свойства height,он будет расширяться как панель стека, основываясь на его содержимом)

0 голосов
/ 21 ноября 2018

Это прекрасно работает для меня.Может быть, вы не показываете остальной код.Это то, что я сделал из вашего примера, и оно работает как положено ...

XAML:

<Window x:Class="WPF_Playground.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow">
    <Grid>
        <ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
            <ListBox ItemsSource="{Binding Items}">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="{x:Type ListBoxItem}">
                        <Setter Property="Focusable" Value="False"/>
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Text}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </ScrollViewer>
    </Grid>
</Window>

ViewModel:

using System.Collections.Generic;
using System.Windows;

namespace WPF_Playground
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public IEnumerable<Item> Items => new Item[]
        {
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" },
            new Item{ Text = "Something" }
        };

        public MainWindow()
        {
            InitializeComponent();

            DataContext = this;
        }
    }  

    public class Item
    {
        public string Text { get; set; }
    }
}

Если вы измените размер окна,Полоса прокрутки появится, когда размещенный элемент управления больше не сможет отобразить все элементы управления.Довольно много стандартного.

...