以前我将 ExpanderView 从 Windows Phone 工具包移植到 WinRT ExpanderRT,现在只是要注意,如果您在 StackPanel 或 ListView 中有两个 ExpanderView 控件,并且您希望通过将 IsExpanded 属性设置为 True 来从头开始展开第一个 expanderView,那么首先expanderView 将覆盖第二个。
这是一个例子:-
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<local:ExpanderControl
IsExpanded="True"
Expander="This is the expander">
<local:ExpanderControl.Items>
<Button Content="Yes"/>
<Button Content="No"/>
</local:ExpanderControl.Items>
</local:ExpanderControl>
<local:ExpanderControl
IsExpanded="False"
Expander="This is the expander">
<ListViewItem>
<StackPanel Orientation="Horizontal">
<Button Content="yes"/>
<Button Content="no"/>
</StackPanel>
</ListViewItem>
</local:ExpanderControl>
</StackPanel>
</Grid>
在尝试调试 ExpanderView 控制代码几个小时后,我发现该代码触发了 4 次
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
if (_presenter == null) return;
var parent = _presenter.GetParentByType<ExpanderControl>();
var gt = parent.TransformToVisual(_presenter);
var childToParentCoordinates = gt.TransformPoint(new Point(0, 0));
_presenter.Width = parent.RenderSize.Width + childToParentCoordinates.X;
}
private void OnPresenterSizeChanged(object sender, SizeChangedEventArgs e)
{
if (null != _itemsCanvas && null != _presenter && IsExpanded)
{
_itemsCanvas.Height = _presenter.DesiredSize.Height;
}
}
在前 2 次中,_itemsCanvas 的高度为 0。而第三次它的高度为 64,第四次将被覆盖为 0。
我还没有找到发生这种情况的任何原因。这里有人可以帮忙吗?