我在我的网格中有以下部分:
<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>如果我在LogOuput中添加一个非常长的文本(用"Ipsum Lorem“测试),由于某种原因,我的边框宽度增加,并且外部ScrollViewer显示一个水平滚动条。
我想要的是,边框的宽度不变(总是伸展到这个网格列的可用空间),内部的ScrollViewer应该显示水平滚动条。我知道我可以通过设置边框的固定宽度来实现这一点,但是-正如前面提到的-我希望边框伸展到可用的空间。
我如何才能做到这一点?
发布于 2021-04-26 22:13:40
您可以将内部ScrallViewer的Width绑定到列的宽度:
<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>Convert方法可以看起来像这样:
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;
}https://stackoverflow.com/questions/67266838
复制相似问题