加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

xaml – windows phone 8.1 ComboBox在项目数量更多时显示多个项

发布时间:2020-12-13 23:32:23 所属栏目:Windows 来源:网络整理
导读:当组合框中有更多项目时,组合框将显示listpicker弹出窗口.如果我选择第一个并向下滚动,则会显示多个选项.但是ComboBox的SelectedItem将是我选择的.我修改了ListPickerFlyout的风格,并关闭了ListView的虚拟化.如果我这样做,ListView不会保留SelectedItem.这个
当组合框中有更多项目时,组合框将显示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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读