WPF是否保持对scrollviewer宽度的控制?

WPF是否保持对scrollviewer宽度的控制?,wpf,layout,scrollviewer,Wpf,Layout,Scrollviewer,是否有方法防止包裹面板(或其他控件)参与滚动宽度计算?例如,我希望“包裹”面板保持在由其他控件创建的宽度范围内,但不直接影响宽度计算。(即)我希望类似于自动关闭时的行为,但仍然允许其他内容的水平滚动变得更宽 <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006

是否有方法防止包裹面板(或其他控件)参与滚动宽度计算?例如,我希望“包裹”面板保持在由其他控件创建的宽度范围内,但不直接影响宽度计算。(即)我希望类似于自动关闭时的行为,但仍然允许其他内容的水平滚动变得更宽

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="1*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <WrapPanel Grid.Column="1" Name="ctlWrap" />
            <TextBox Grid.Row="1" Grid.Column="1" Width="100" HorizontalAlignment="Left" Name="ctlText" />
            <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal">
                <Button Click="Button_Click">Add Wrap</Button>
                <Button Click="Button_Click_1">Remove Wrap</Button>
                <Button Click="Button_Click_2">Add Text</Button>
                <Button Click="Button_Click_3">Remove Text</Button>
            </StackPanel>
        </Grid>
    </ScrollViewer>
</Grid>
</Window>

我稍微投降了。我将按钮放在网格的左列,然后将width和maxwidth绑定到滚动条的viewportwidth,将左边距绑定到水平偏移

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:WpfApplication14"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <app:MarginConverter x:Key="mc" />
</Window.Resources>
<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="ctlScroll">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="1*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <WrapPanel Grid.ColumnSpan="2" Grid.Column="0" Name="ctlWrap" Width="{Binding ViewportWidth, ElementName=ctlScroll}" MaxWidth="{Binding ViewportWidth, ElementName=ctlScroll}" Margin="{Binding HorizontalOffset, ElementName=ctlScroll, Converter={StaticResource mc}}" HorizontalAlignment="Left" />
            <TextBox Grid.Row="1" Grid.Column="1" Width="100" HorizontalAlignment="Left" Name="ctlText" />
            <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal">
                <Button Click="Button_Click">Add Wrap</Button>
                <Button Click="Button_Click_1">Remove Wrap</Button>
                <Button Click="Button_Click_2">Add Text</Button>
                <Button Click="Button_Click_3">Remove Text</Button>
            </StackPanel>
        </Grid>
    </ScrollViewer>
</Grid>
</Window>


.

您的问题不清楚。。。听起来您可能需要开发自己的自定义
面板
,但我不确定您想要什么。我希望包装面板的大小与滚动条的有效大小相同,而不影响滚动条的宽度。有两个条件:1)视图空间中适合所有其他内容。“包裹”面板应为视图空间的宽度。2) 其他一些内容比视图空间宽,滚动条允许滚动到该宽度。包裹面板应为新宽度。i、 它的大小与滚动条的宽度相同,但不影响滚动条的宽度。在我的场景中,包裹面板位于滚动条中网格的第二列。ViewportWidth绑定是一种方法。谢谢你。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:WpfApplication14"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <app:MarginConverter x:Key="mc" />
</Window.Resources>
<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="ctlScroll">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="1*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <WrapPanel Grid.ColumnSpan="2" Grid.Column="0" Name="ctlWrap" Width="{Binding ViewportWidth, ElementName=ctlScroll}" MaxWidth="{Binding ViewportWidth, ElementName=ctlScroll}" Margin="{Binding HorizontalOffset, ElementName=ctlScroll, Converter={StaticResource mc}}" HorizontalAlignment="Left" />
            <TextBox Grid.Row="1" Grid.Column="1" Width="100" HorizontalAlignment="Left" Name="ctlText" />
            <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal">
                <Button Click="Button_Click">Add Wrap</Button>
                <Button Click="Button_Click_1">Remove Wrap</Button>
                <Button Click="Button_Click_2">Add Text</Button>
                <Button Click="Button_Click_3">Remove Text</Button>
            </StackPanel>
        </Grid>
    </ScrollViewer>
</Grid>
</Window>