如果以下任何代码格式不正确,我们深表歉意。我是通过手机发布的,因为我的wifi现在遇到了麻烦。
我希望能够做出这样的事情(我知道这样做不可能):
...
<RowDefinition Height="Auto" ActualHeight="{Binding RowHeight, Mode="OneWayToSource"}"/>
...
所以,基本上高度是自动的(因为其中可能的项目数量(例如Label)是0-n - 使用ItemsControl表示),但我需要知道项目控件的确切高度(在这种情况下) ,它是行来计算&#34;页面的数量&#34;需要代表我的数据。就像ms中的页面一样。
然而,命名行(theRow.ActualHeight)是不可能的,因为VM / MVVM一般不应该这样做(我不能直接访问视图)
知道怎么做吗?感谢。
答案 0 :(得分:1)
这就是我所拥有的,似乎有效。另外,我复制了this帖子中的SizeObserver
:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="This is row 1" Grid.Row="0"></TextBlock>
<ItemsControl Grid.Row="1"
vm:SizeObserver.Observe="True"
vm:SizeObserver.ObservedHeight="{Binding ActHeight, Mode=OneWayToSource}">
<TextBlock Text="1"></TextBlock>
<TextBlock Text="2"></TextBlock>
<TextBlock Text="3"></TextBlock>
<TextBlock Text="4"></TextBlock>
<TextBlock Text="5"></TextBlock>
<TextBlock Text="6"></TextBlock>
</ItemsControl>
<TextBlock Text="This is row 3"
Grid.Row="2"></TextBlock>
</Grid>
在我的视图模型中:
public double ActHeight
{
get
{
return _height;
}
set
{
_height = value;
}
}
因为ItemsControl
是第1行中唯一的元素,我们知道行的定义或行的高度将是行内控件的实际高度 - ItemsControl
。