防止WPF网格无限增长

时间:2016-02-17 09:36:11

标签: wpf xaml user-controls

我的问题类似于: Prevent WPF control from expanding beyond viewable area 区别在于,已接受的解决方案(特定于StackPanel的问题)对我没有多大帮助。

我有一个窗口,目前只包含以下网格:

 <Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="265"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="147*"/>
        <RowDefinition Height="173*"/>
    </Grid.RowDefinitions>

    <Button Content="Button" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="75" Click="Button_Click" Grid.Row="1" Grid.Column="1"/>
    <local:BatteryGraphicsView x:Name="batView" HorizontalAlignment="Stretch" ClipToBounds="True" Width="265"/>
 </Grid>

我现在想要的是,如果我的GraphicsView扩展到其列的宽度,则会显示滚动条,并且控件不会将其自绘超出列的边界。

只要按下按钮,就会发生这种情况。 用户控件基本上是一个包含WinFormsHosts的网格,当按下按钮时,为网格创建了更多的列,因此网格增长了 (Usercontrol grid xaml)

<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" ClipToBounds="True">
    <Grid x:Name="Maingrid" ClipToBounds="True">                
        <Grid.RowDefinitions>
            <RowDefinition Height="40*"/>
            <RowDefinition Height="20*"/>
            <RowDefinition Height="40*"/>
        </Grid.RowDefinitions>
        <WindowsFormsHost x:Name="host1" />
        <WindowsFormsHost x:Name="host2" Grid.Row="2"/>
        </Grid>
</ScrollViewer>  

当Scollviewer意识到需要自己显示它时,无论如何,mainGrid都会显示在列的边界之外。 在多个相关帖子中,我看到你需要将“ClipToBounds”属性设置为true,但是我为每个控件设置了属性,但仍然没有反应。

1 个答案:

答案 0 :(得分:0)

问题是你的UserControl中的ScrollViewer不知道GridColumn&amp;和GridRow大小是。

你可以做两件事。

1:为您的列指定MAX宽度&amp;最大高度为你行

2:不要在UserControl中添加scrollViewer,而是将其添加到网格中并为其指定高度和宽度。