StackPanel обернут в ScrollViewer и при появлении скролла , смещается контент внутри StackPanel
Нужно чтобы контент не смещался. Что можно сделать в этом случае ?
<ScrollViewer Name="scroll" VerticalScrollBarVisibility="Hidden">
<ScrollViewer.Resources>
<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">5</sys:Double>
</ScrollViewer.Resources>
<StackPanel Name="kontejner">
</StackPanel>
</ScrollViewer>
В StackPanel программно добавляю такие textblock
TextBlock textBlock = new TextBlock();
textBlock.MinHeight = 20;
textBlock.TextWrapping = TextWrapping.Wrap;
textBlock.VerticalAlignment = VerticalAlignment.Center;
textBlock.Margin = new Thickness(10, 5, 10, 5);
Scroll появляется так:
private void Window_MouseMove(object sender, MouseEventArgs e)
{
if (KontejnerSoobshchenij.ActualHeight > scroll.ViewportHeight)
{
scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
}
}
Пояснение:
Сколл появляется при наведении мышки на окно и нужно, чтобы он не изменял ширину TextBlock-ов
Если вы установите у StackPanel фиксированную ширину, а родительская панель будет выделять столько места, сколько у нее просят, то получится как раз поведение которое вам нужно:
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Width="100">
<TextBlock Text="{Binding ElementName=tb, Path=Text}"
TextWrapping="Wrap"/>
</StackPanel>
</ScrollViewer>
<TextBox Grid.Column="1" Name="tb" AcceptsReturn="True"/>
</Grid>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей