当组合框中有更多项目时,组合框将显示listpicker弹出窗口.如果我选择第一个并向下滚动,则会显示多个选项.但是ComboBox的SelectedItem将是我选择的.我修改了ListPickerFlyout的风格,并关闭了ListView的虚拟化.如果我这样做,ListView不会保留SelectedItem.这个ComboBox的错误?有没有解决这个问题
这是我修改的风格
<DataTemplate x:Key="ListPickerFlyoutPresenterContentTemplate" > <ListView VirtualizingStackPanel.VirtualizationMode="Recycling" SelectionMode="Single" > <!--<ListView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel/> </ItemsPanelTemplate> </ListView.ItemsPanel>--> <ListView.ItemContainerStyle> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListViewItem"> <Border x:Name="OuterContainer" RenderTransformOrigin="0.5,0.5"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="Pressed"/> <VisualState x:Name="Disabled"/> <VisualStateGroup.Transitions> <VisualTransition From="Pressed" To="Normal" /> </VisualStateGroup.Transitions> </VisualStateGroup> <VisualStateGroup x:Name="SelectionStates"> <VisualState x:Name="Unselected" /> <VisualState x:Name="Selected"> <Storyboard> <DoubleAnimation Storyboard.TargetName="CheckGlyph" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> <DoubleAnimation Storyboard.TargetName="SelectedCheckMark" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Foreground" Duration="0"> <DiscreteObjectKeyFrame KeyTime="0" Value="Green" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListPickerFlyoutPresenterSelectedItemBackgroundThemeBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="SelectedUnfocused"> <Storyboard> <DoubleAnimation Storyboard.TargetName="CheckGlyph" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> <DoubleAnimation Storyboard.TargetName="SelectedCheckMark" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Foreground" Duration="0"> <DiscreteObjectKeyFrame KeyTime="0" Value="Green" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListPickerFlyoutPresenterSelectedItemBackgroundThemeBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup> <VisualStateGroup x:Name="DataVirtualizationStates"> <VisualState x:Name="DataAvailable" /> <VisualState x:Name="DataPlaceholder"> </VisualState> </VisualStateGroup> <VisualStateGroup x:Name="MultiSelectStates"> <VisualState x:Name="NoMultiSelect" /> <VisualState x:Name="ListMultiSelect"> </VisualState> <VisualState x:Name="GridMultiSelect" /> <VisualStateGroup.Transitions> <VisualTransition From="ListMultiSelect" To="NoMultiSelect" GeneratedDuration="0:0:0.15" /> <VisualTransition From="NoMultiSelect" To="ListMultiSelect" GeneratedDuration="0:0:0.15" /> </VisualStateGroup.Transitions> </VisualStateGroup> <!--<VisualStateGroup x:Name="HighlightStates"> <VisualState x:Name="NoHighlight" /> <VisualState x:Name="Highlighted"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Foreground" Duration="0"> <DiscreteObjectKeyFrame KeyTime="0" Value="Red" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListPickerFlyoutPresenterSelectedItemBackgroundThemeBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup>--> </VisualStateManager.VisualStateGroups> <Grid> <ContentPresenter x:Name="contentPresenter" ContentTransitions="{TemplateBinding ContentTransitions}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" Style="{ThemeResource FlyoutPickerListViewItemContentPresenterStyle}" /> <!--The 'Xg' text simulates the amount of space one line of text will occupy. In the DataPlaceholder state,the Content is not loaded yet so we approximate the size of the item using placeholder text.--> <TextBlock x:Name="PlaceholderTextBlock" Opacity="0" Text="Xg" Foreground="{x:Null}" Margin="{TemplateBinding Padding}" IsHitTestVisible="False" AutomationProperties.AccessibilityView="Raw"/> <Rectangle x:Name="PlaceholderRect" Visibility="Collapsed" Fill="{ThemeResource FlyoutBackgroundThemeBrush}" IsHitTestVisible="False" /> </Grid> </Border> </Border> </Border> <Border x:Name="SelectedBorder" IsHitTestVisible="False" Opacity="0" BorderBrush="{ThemeResource ListViewItemSelectedBackgroundThemeBrush}" BorderThickness="{ThemeResource GridViewItemMultiselectBorderThickness}"> <Grid x:Name="SelectedCheckMark" Opacity="0" Height="34" Width="34" HorizontalAlignment="Right" VerticalAlignment="Top"> <Path x:Name="SelectedEarmark" Data="M0,0 L40,40 z" Fill="{ThemeResource ListViewItemSelectedBackgroundThemeBrush}" Stretch="Fill" /> <Path x:Name="SelectedGlyph" Data="M0,123 L39,93 L124,164 L256,18 L295,49 L124,240 z" Fill="{ThemeResource ListViewItemCheckThemeBrush}" Height="14.5" Stretch="Fill" Width="17" HorizontalAlignment="Right" Margin="0,1,0" VerticalAlignment="Top" FlowDirection="LeftToRight" /> </Grid> </Border> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </ListView.ItemContainerStyle> <ListView.Footer> <Border Height="{ThemeResource ListPickerFlyoutFooterThemeHeight}" Width="1" /> </ListView.Footer> </ListView> </DataTemplate>
当我选择一些项目时,它不会去选择的视觉状态,它实际上转到突出显示的视觉状态,当我关闭虚拟化以前的突出显示状态不会被保留
问题在于listviewitems的虚拟化(它是控件中的一个错误).
解决方案是设置listview的itemsstackpanel的CacheLength属性.
代码是:
<DataTemplate x:Key="ListPickerFlyoutPresenterContentTemplate"> <ListView ItemContainerStyle="{StaticResource ListPickerFlyoutPresenterItemStyle}"> <ListView.ItemsPanel> <ItemsPanelTemplate> <ItemsStackPanel CacheLength="10" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.Footer> <Border Height="{ThemeResource ListPickerFlyoutFooterThemeHeight}" Width="1" /> </ListView.Footer> </ListView> </DataTemplate>
该解决方案仅在项目实现后稍后(几秒钟)才能移除选择亮度.
希望解决方案是好的,你必须覆盖列表视图的PrepareContainerForItemOverride
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。