У меня есть WrapPanel, и кнопки программно создаются и добавляются как дети WrapPanel. Итак, я хочу показать вертикальную полосу прокрутки, когда WrapPanel полон кнопок (детей), чтобы иметь возможность добавлять больше кнопок непрерывно.Как сделать WrapPanel, чтобы показать вертикальную полосу прокрутки, когда дети полны или без ScrollViewer
Если нам нужна полоса прокрутки, нам нужно принести ScrollViewer? Нет ли способа без ScrollViewer? То, что я хочу получить, потому что WrapPanel имеет небольшой размер, я хочу, чтобы полоса прокрутки отображалась только в случае необходимости (например, для детей).
Мой код прост, как показано ниже (WrapPanel внутри сетки и сетки внутри TabControl)
Большое спасибо всегда за совершенство.
Обновление: Я изо всех сил пытался найти решение в Интернете даже на несколько дней. И я попробовал установить WrapPanel внутри ScrollViewer. Тем не менее, хотя я устанавливаю вертикальную шину в auto, вертикальная полоса прокрутки всегда отображается, даже если WrapPanel не имеет дочерних элементов.
Кроме того, когда я намеренно делаю WrapPanel полными детей (кнопок), вертикальная полоса прокрутки ScrollViewer не обеспечивает доступность прокрутки. И кнопки в нижней строке WrapPanel показаны вырезать и больше, я не могу прокрутить вниз, чтобы увидеть за кнопкой в нижней строке. Я сделал кнопки, которые можно было бы разместить вне нижней линии WrapPanel намеренно.
С или без, я хочу, чтобы вертикальная полоса прокрутки отображалась только в случае необходимости (полная детей). Кажется, очень легко сделать. Но трудно заставить его работать должным образом.
Решение: была предоставлена г-на Хенка Holterman
<DropShadowEffect/>
</Button.Effect>
</Button>
<WrapPanel x:Name="WrapPanelGreen" HorizontalAlignment="Left" Height="180" VerticalAlignment="Top" Width="232" UseLayoutRounding="True" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
</Grid>
</TabItem>
</TabControl>
А ниже мой простой код, который делает кнопку программно и добавить дочерний WrapPanel.
for (int k = 0; k < Overviews.Length; k++)
{
Button btnoverviewcontent = new Button();
ToolTip tt = new ToolTip();
tt.Content = "Press this button if you want to modify or delete.";
btnoverviewcontent.ToolTip = tt;
btnoverviewcontent.Cursor = Cursors.Hand;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 101, 173, 241);
btnoverviewcontent.Background = mySolidColorBrush;
btnoverviewcontent.Effect = new DropShadowEffect
{
Color = new Color { A = 255, R = 0, G = 0, B = 0 },
Direction = 315,
ShadowDepth = 5,
Opacity = 1
};
btnoverviewcontent.Padding = new Thickness(3, 3, 3, 3);
btnoverviewcontent.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch;
TextBlock textBlock = new TextBlock()
{
Text = Overviews[k],
TextAlignment = TextAlignment.Left,
TextWrapping = TextWrapping.Wrap,
};
btnoverviewcontent.Content = textBlock;
btnoverviewcontent.BorderThickness = new Thickness(0, 0, 0, 0);
btnoverviewcontent.FontStretch = FontStretches.UltraExpanded;
btnoverviewcontent.Margin = new Thickness(5, 5, 5, 5);
WrapPanelGreen.Children.Add(btnoverviewcontent);
btnoverviewcontent.Click += new RoutedEventHandler(OnOverviewClick);
Я хотел бы направить вас: http://stackoverflow.com/a/2119243/1723823 Это хорошая разбивка базовой функции WrapPanel с некоторыми комментариями о том, как реализовать прокрутку с ней. – TernaryTopiary
@HenkHolterman, см. Мой обновленный вопрос. Спасибо за ваш драгоценный комментарий. –
@TernaryTopiary, Большое спасибо за ваше направление. Тем не менее, я также оценил связанную страницу и в это время полностью снова. Моя проблема: дети (кнопка) сделаны программно, а размер детей различен в зависимости от их текстового содержимого. Поэтому я не могу принять второе решение. Пожалуйста, посмотрите мой обновленный вопрос. –