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;
}