我的问题类似于: 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,但是我为每个控件设置了属性,但仍然没有反应。
答案 0 :(得分:0)
问题是你的UserControl中的ScrollViewer不知道GridColumn&amp;和GridRow大小是。
你可以做两件事。
1:为您的列指定MAX宽度&amp;最大高度为你行
2:不要在UserControl中添加scrollViewer,而是将其添加到网格中并为其指定高度和宽度。