【问题标题】:resize of usercontrols and objects inside a grid wpf调整网格 wpf 内的用户控件和对象的大小
【发布时间】:2015-12-24 11:59:30
【问题描述】:

我有一个 WPF 应用程序,我希望当用户将窗口大小调整为更小的尺寸时,所有控件都保持相同的高度和宽度,但显示滚动条。我首先将网格行和列、高度和宽度设置为自动,但是当我这样做时,我的所有控件都离开了页面。当我在行和列上设置大小时,一切看起来都很完美,除了窗口缩小时,一切都被挤压在一起。克服这个问题的最佳解决方案是什么?我的部分 xaml 代码如下所示

XAML

    <Grid Background="White" x:Name="GeologicalAnalysisUI">
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="255"/>
        <ColumnDefinition Width="0.8*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1.3*"/>
        <ColumnDefinition Width="1.3*"/>
    </Grid.ColumnDefinitions>
    <Border BorderBrush="DimGray" Grid.Row="1" Grid.Column="1" BorderThickness="1" Grid.ColumnSpan="3" Margin="0,2,0,2" Grid.RowSpan="6">
    </Border>
    <Border BorderBrush="DimGray" Grid.Row="1" Grid.Column="4" BorderThickness="1" Margin="5,2,0,2" Grid.RowSpan="6">
    </Border>
    <Border Grid.Column="1" Grid.Row="0" BorderBrush="DimGray" BorderThickness="1,1,1,0" Margin="0,0,0,0" Height="23" Width="180" HorizontalAlignment="Left" VerticalAlignment="Top" Background="White" Grid.RowSpan="2">
        <TextBlock HorizontalAlignment="Left" Height="16" Margin="10,3,0,0" TextWrapping="Wrap" VerticalAlignment="Center" Width="233" FontSize="11"><Run Language="en-gb" Text="Geological characterisation"/><LineBreak/><Run Language="en-gb"/></TextBlock>
    </Border>
    <Border Grid.Column="4" Grid.Row="0" BorderBrush="DimGray" BorderThickness="1,1,1,0" Margin="5,0,0,0" Height="23" Width="150" HorizontalAlignment="Left" VerticalAlignment="Top" Background="White" Grid.RowSpan="2">
        <TextBlock HorizontalAlignment="Left" Height="17" Margin="10,3,0,0" TextWrapping="Wrap" VerticalAlignment="Center" Width="88" FontSize="11"><Run Language="en-gb" Text="Input data"/></TextBlock>
    </Border>
<Controls:SequenceTrendingControl x:Name="sequenceControlStratigraphy" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="25, 12, 0, 0"/>
    <TextBlock Text="Sequence Stratigraphy" FontFamily="{StaticResource FontFamily}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="48,20,0,0" FontSize="11"/>
    <Path Data="M2.4,62 L103.4,62" HorizontalAlignment="Left" Height="1" Margin="22,42,0,0" Stretch="Fill" Stroke="#A8A8A8" VerticalAlignment="Top" Grid.Column="1" Grid.Row="1"/>
    <Controls:FitButtonControl x:Name="fitButtonControlStratigraphy" Grid.Row="1" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,15,0,0"/>
    <Stratigraphy:StratiGraphControl x:Name="graphControlStatigraphy" Grid.Row="1" Grid.Column="1" Margin="5,49,5,5"  VerticalAlignment="Top" Grid.RowSpan="6" />

编辑

第一张图片来自我的笔记本电脑,您可以看到控件重叠

上面的图片是我桌面上显示的图片

现在我的问题是,无论它在哪个屏幕上,如何停止事物的重叠?

【问题讨论】:

    标签: c# wpf resize window


    【解决方案1】:

    要在窗口大小更改时不调整 Grid 的大小,您可以将 Grid 包装在 ScrollViewer 元素中。这将为您的内容添加滚动条,而不是调整其大小。将VerticalScrollBarVisibilityHorizontalScrollBarVisibility 设置为Auto 将仅在需要时显示滚动条。

    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Grid Background="White" x:Name="GeologicalAnalysisUI">
            <!-- Your data -->
        </Grid>
    </ScrollViewer>
    

    除非ScrollViewer 是另一个具有特定大小集的控件的子元素,否则仍然可以进行放大。查看器本身设置了(最大)宽度/高度。

    【讨论】:

    • 我之前试过用这个,但是我里面的所有控件都离开了页面,一切都变得如此之大,这可能是因为用户控件的宽度和高度吗?
    • @RyanArchibald 我真的不明白你所说的一切都变大是什么意思。据我尝试,我将代码复制到的窗口需要 606x117 的大小来显示空列和行的内容(您发布的内容除外),以便在没有滚动条的情况下显示。但是,是的,这肯定会受到控件大小的影响(例如,第 1 列第 0 行中的边框,宽度为 180,高度为 23(大于第 0 行的高度 (20px))。
    • 我将显示图像,其中一个程序在我的笔记本电脑上,另一个在我的台式机上,希望这有助于解释我的意思,如果它不让我知道,我会尝试更好地解释它,很抱歉最初没有更好地解释它
    • 添加了两张图片以尝试解释,并附上我需要解决的问题的文字,任何帮助将非常感谢。
    • @RyanArchibald 您是否尝试为列/行设置MinWidth/MinHeight 属性?由于您为网格中的某些项目设置了大小,这可能会导致重叠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多