我觉得你这样的事情后(但随着DataGrids
,而不是简单TextBlocks
- 我currenty只能访问Kaxaml,但其基本思想是一样的):
下面是该XAML(不完整的Lorem存有部分):
<Grid x:Name="grid" Height="400" Width="350">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition x:Name="normalRow" Height="*"/>
</Grid.RowDefinitions>
<TextBlock x:Name="Frozen" Grid.Row="0"
MaxHeight="{Binding Path=Height, ElementName=grid}"
Background="LightBlue" TextWrapping="Wrap" Padding="5">
Lorem ipsum dolor...
</TextBlock>
<ScrollViewer x:Name="Normal" Grid.Row="1"
MaxHeight="{Binding Path=Height, ElementName=normalRow}" >
<TextBlock Margin="5" TextWrapping="Wrap">
Lorem ipsum dolor...
</TextBlock>
</ScrollViewer>
</Grid>
主要想法是命名RowDefinition
,并将“正常”部分的Height
与其Height
属性绑定,同时将第一行的MaxHeight
绑定到Grid
的Height
。
一个共同的“绝招”我经常使用:命名UserControl
(例如:x:Name="Instance"
),您可以轻松地绑定到这种方式的属性,在这种情况下,Width
和最Grid
控制Height
。
更新:
,如果大小控制到一个足够小的尺寸的第一行的内容被削减可以通过引入MaxHeight
到RowDefinition
,并绑定固定的问题到Grid
本身的Height
,但不幸的是它似乎设置RowDefinition
的Heigth
到Auto
使其忽略任何MaxHeight
设置(见本question)...
但这里是一个解决办法:
<UserControl x:Name="instance">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition x:Name="normalRow" Height="*"/>
</Grid.RowDefinitions>
<ScrollViewer x:Name="Frozen" Grid.Row="0"
ScrollViewer.VerticalScrollBarVisibility="Auto"
MaxHeight="{Binding ElementName=instance, Path=Height}">
<TextBlock x:Name="test" Background="LightBlue" TextWrapping="Wrap" Padding="5" >
Lorem ipsum dolor ...
</TextBlock>
</ScrollViewer>
<ScrollViewer x:Name="Normal" Grid.Row="1"
ScrollViewer.VerticalScrollBarVisibility="Auto"
MaxHeight="{Binding Path=Height, ElementName=normalRow}" >
<TextBlock Margin="5" TextWrapping="Wrap">
Lorem ipsum dolor ...
</TextBlock>
</ScrollViewer>
</Grid>
</UserControl>
关键是要结合第一列的内容的MaxHeight
到UserControl
的高度。
当然在你的情况下ScrollViewers
并不是真的需要,因为DataGrid
有内置滚动条,但我希望你明白了。
Sory想要添加图片来帮助,但我没有足够的代表.... =( – Northik 2014-09-18 16:58:05
您仍然可以将图片上传到某个图片主持人,并在您的问题中添加一个链接。 – qqbenq 2014-09-19 09:49:28