为什么我的ScrollViewer会破坏我的网格布局?WPF

Mar*_*erg 9 .net c# wpf xaml

问题:在网格周围添加ScrollViwer时,网格缩放被取消!

Eksampel:我创建了一个网格宽度为3列的列,1.coulymn应该总是比第2列和第3列大2倍!没有ScrollViewer,这总是正确的,但是在添加它时,它允许每列确定自己的大小.

<Window x:Class="alternatingGridRow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="200" Width="Auto" Loaded="WindowLoaded">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
    <Grid x:Name="LayoutRoot" ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" MinHeight="23" MaxHeight="60"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
            <TextBlock HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" />
            <TextBlock Foreground="Red" Grid.Column="1" HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" />
    </Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

您可以清楚地看到缩放因子是完全错误的!由于2.列是大的方式!和3.列是一些随机大小...

错误的缩放因素

对此的任何建议都很好听了......干杯马丁

Moh*_*dil 5

当前设置是错误的,因为ScrollViewer它不限制其子Grid节点的宽度和高度(即无限制),而且,总是填充其父容器上可用的所有可用水平和垂直空间,这就是为什么你看到这种奇怪的行为.您必须执行以下操作之一:

  1. 或者,ScrollViewer如你所述删除.
  2. 或者,为您设置固定的高度和宽度Grid.


Ken*_*art 5

您要求网格为每列分配无限空间的百分比.无限,因为在ScrollViewer上启用了水平滚动,ScrollViewers的整个要点是虚拟化空间.所以你要求它做的事情甚至没有意义.


Mar*_*erg 5

好的,我明白你的观点,为什么柱子的尺寸是螺丝的。
但是..当我读到你的帖子时我想到了一个解决方案......

正如穆罕默德所说,在我的网格上设置一个固定宽度,好吧..我希望我的网格与滚动查看器具有相同的宽度,除非它变小,然后我希望滚动查看器生效!所以..我的解决方案是:

MinWidth="500" Width="{Binding ActualWidth, ElementName=scrollviewer}"

<Window x:Class="alternatingGridRow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="200" Width="Auto">
<ScrollViewer x:Name="scrollviewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
    <Grid x:Name="LayoutRoot" ShowGridLines="True" MinWidth="500" Width="{Binding ActualWidth, ElementName=scrollviewer}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" MinHeight="23" MaxHeight="60"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
            <TextBlock HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" />
            <TextBlock Foreground="Red" Grid.Column="1" HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" />
    </Grid>
</ScrollViewer>

</Window>
Run Code Online (Sandbox Code Playgroud)

(仅水平固定)

谢谢。