我在SET IMPLICIT_TRANSACTIONS ON
应用中使用WPF
ExpanderView
(ExpanderRT)的端口来显示包含项目的可扩展标头。当第一次启动应用程序并初始化UWP
时,此工作正常。但是,如果我导航到新页面,然后返回MainPage
MainPage
看起来像展开,但不会显示项目。它应该与首次初始化ExpanderView
时的外观相同。我抓了一个MainPage
来表示行为。
这是GIF
上XAML
的{{1}};
UserControl
这是我用于导航的MainPage
;
<ListView x:Name="CategoriesListView" ScrollViewer.VerticalScrollBarVisibility="Hidden">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ListViewItemPresenter ContentMargin="0" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:Category">
<expander:ExpanderControl
x:Name="expander_Main"
ItemsSource="{x:Bind childItems}"
Expanded="Expanded" />
</DataTemplate>
</ListView.ItemTemplate>
如果你们中的任何人都知道为什么EventHandler
有这么奇怪的行为,请给我一个提示 - 如果你需要,我可以提供更多我的代码。
[UPDATE]
我注意到,当我在移动设备(智能手机或移动Windows 10模拟器)上运行应用程序时,只会发生此行为。如果我在本地计算机上执行应用程序 private void OnSettingsButtonChecked(object sender, RoutedEventArgs e)
{
ShellSplitView.IsPaneOpen = false;
ViewModel.NavigationService.Navigate(typeof(SettingsPage));
}
正常工作。当我使用后退按钮导航回ExpanderView
时,它按预期工作 - 我不知道如何解决这个问题,这真的很奇怪。
答案 0 :(得分:3)
在调试ExpanderRT
控件的整个代码后,我能够解决问题!它是由原始Expander控件的一个错误引起的,该错误被移植到WinRT
我发现,通过此方法设置了班级_itemsCanvas
中ExpanderControl.cs
的高度:
private void OnPresenterSizeChanged(object sender, SizeChangedEventArgs e)
{
if (null != _itemsCanvas && null != _presenter && IsExpanded)
{
_itemsCanvas.Height = _presenter.DesiredSize.Height;
}
}
这会导致仅在ExpanderView
当前展开时应用项容器的大小。我只是添加了以下条件,以便在ExpanderView
当前未展开时将项容器的高度设置为0。
else if (null != _itemsCanvas && null != _presenter && !IsExpanded)
{
_itemsCanvas.Height = 0;
}
我添加了对控件的各种改进以利用新的UWP功能,因此如果有人对UWP兼容版本感兴趣,请随时与我联系。
<强> 更新 强>
我为更新后的ExpanderControl for UWP
创建了一个GitHub Repo