以前、ExpanderView を Windows Phone ツールキットから WinRT ExpanderRTに移植しましたが、StackPanel または ListView 内に 2 つの ExpanderView コントロールがあり、IsExpanded プロパティを True に設定して最初の expanderView を最初から展開したい場合は、最初にexpanderView は 2 番目のものをオーバーレイします。
ここに例があります: -
<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 です。3 回目の高さは 64 で、4 回目までに 0 に上書きされます。
これが起こっている理由はわかりません。ここで誰でも助けてくれますか?