C# 如何防止外部scrollviewer覆盖内部scrollviewer?
我的网格中有以下部分:C# 如何防止外部scrollviewer覆盖内部scrollviewer?,c#,wpf,xaml,scrollbar,C#,Wpf,Xaml,Scrollbar,我的网格中有以下部分: <ScrollViewer Grid.Column="4" Grid.Row="0" CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <StackPanel Orientation="Ve
<ScrollViewer Grid.Column="4" Grid.Row="0" CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel Orientation="Vertical" Margin="10" HorizontalAlignment="Stretch">
<!-- other controls such as sliders, Textboxes and so on -->
<Border Height="200" BorderThickness="1" BorderBrush="DarkGray" Margin="5" HorizontalAlignment="Stretch">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="auto" >
<TextBlock Text="{Binding LogOutput}" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap"/>
</ScrollViewer>
</Border>
</StackPanel>
</ScrollViewer>
如果我在注销
(使用“Ipsum Lorem”测试)中添加很长的文本,由于某种原因,我的边框的宽度会增加,并且外部的滚动查看器
会显示一个水平滚动条
我想要的是,边框的宽度不会改变(总是延伸到这个网格列的可用空间),内部的ScrollViewer
应该显示水平滚动条。
我知道我可以通过为边界设置一个固定的宽度来实现这一点,但是,正如前面提到的,我希望边界延伸到可用空间
如何实现这一点?您可以将内部
ScrallViewer
的宽度绑定到列的宽度:
<Border Height="200" BorderThickness="1" BorderBrush="DarkGray" Margin="5" HorizontalAlignment="Stretch"
Width="{Binding Path=ColumnDefinitions[putColIndexHere], Converter={StaticResource ColDefinitionToWidthConverter}, ConverterParameter=30, RelativeSource={RelativeSource AncestorType=Grid}}">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="auto" Background="Cyan"
>
<TextBlock Text="{Binding StrTest}" TextWrapping="NoWrap"/>
</ScrollViewer>
</Border>
您是否需要外部ScrollViewer
的HorizontalScrollBar
?@Rekshino是的。例如,如果用户调整窗口的大小,并且网格列对于该列中的其他控件来说太小,则应显示此选项。
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value is System.Windows.Controls.ColumnDefinition colDef)
{
return colDef.ActualWidth + colDef.Offset - int.Parse(parameter as string) ;
}
return value;
}