У меня есть ItemsControl
, который отображает кучу UserControl
внутри WrapPanel
. Это работает отлично, если у меня нет кучи UserControls, а затем переполнение отображается за пределами экрана, и я не могу получить к нему доступ. Моя цель состоит в том, чтобы обернуть WrapPanel горизонтально, но как только элементы управления отключены от экрана, чтобы отобразить полосу прокрутки, и это, похоже, не работает для меня.A WPF ItemsControl и WrapPanel входят в бар
<ItemsControl ItemsSource="{Binding Servers, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="1" Margin="5,5,5,5">
<local:ServerControl DataContext="{Binding }" /> <!-- The actual UserControl -->
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Когда приложение запускается, это то, на что оно похоже. То, что вы не видите, должно быть в том, что должно быть 14 ящиков. WrapPanel выполняет свою работу, но он отображается за пределами окна.
Это показывает все UserControls, но мне пришлось развернуть окно, чтобы быть в состоянии увидеть их все.
Любая помощь будет принята с благодарностью.
Полный XAML:
<Window x:Class="ServerMonitor.Wpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ServerMonitor.Wpf"
xmlns:models="clr-namespace:ServerMonitor.Wpf.Models"
xmlns:System="clr-namespace:System;assembly=mscorlib"
Title="Leading Hedge Server Monitor" Height="350" Width="800">
<Window.DataContext>
<models:MainWindowViewModel>
<models:MainWindowViewModel.MachineNames>
<!-- Test Servers -->
<System:String>T009</System:String>
<System:String>T010</System:String>
<System:String>T011</System:String>
<System:String>T012</System:String>
</models:MainWindowViewModel.MachineNames>
</models:MainWindowViewModel>
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Menu Grid.Row="0">
</Menu>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Servers, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="1" Margin="5,5,5,5">
<local:ServerControl DataContext="{Binding }" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Template>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
</Grid>
</Window>
Я не уверен, какое реальное поведение вы ожидаете - возможно, вы могли бы точно определить, что хотите? Если вы поместите панель обертки в средство просмотра прокрутки, то она больше не будет работать как панель обертки, потому что средство просмотра прокрутки имеет бесконечные размеры. В этом случае вы можете просто использовать панель стека. Опять скажите мне, что вы хотите, и я могу дать вам некоторые идеи/советы. :) – user3690202
К сожалению, цель состоит в том, чтобы элементы управления были обернуты, как панель обертывания, но если элементы управления обернуты за пределы самого окна, чтобы активировать полосу прокрутки, поэтому мне не нужно изменять размер всего окна, чтобы увидеть все. –
Итак, вы хотите обернуть по горизонтали, но когда он достигнет дна, вы хотите прокрутить вертикально? – user3690202