【问题标题】:Problems with flyout over itemscontrol in Windows Phone 8.1Windows Phone 8.1 中项目控件的弹出问题
【发布时间】:2014-10-18 03:42:49
【问题描述】:

我有以下 XAML 代码:

    <Grid Grid.Row="1" x:Name="ContentRoot" Margin="19,9.5,19,0">
        <ScrollViewer>
            <ItemsControl ItemsSource="{Binding History}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical" Tapped="HistoryItemTapped">
                            <FlyoutBase.AttachedFlyout>
                                <Flyout>
                                    <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                        <ScrollViewer>
                                            <TextBlock Foreground="{ThemeResource PhoneMidBrush}" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" HorizontalAlignment="Left" Text="{Binding Expression}" />
                                        </ScrollViewer>
                                        <ScrollViewer>
                                            <TextBlock FontSize="{ThemeResource TextStyleExtraLargePlusFontSize}" HorizontalAlignment="Right" Text="{Binding Result}" />
                                        </ScrollViewer>
                                    </StackPanel>
                                </Flyout>
                            </FlyoutBase.AttachedFlyout>
                            <TextBlock Foreground="{ThemeResource PhoneMidBrush}" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" HorizontalAlignment="Left" Text="{Binding Expression}" 
                                       TextTrimming="CharacterEllipsis"/>
                            <TextBlock FontSize="{ThemeResource TextStyleExtraLargePlusFontSize}" HorizontalAlignment="Right" Text="{Binding Result}" 
                                       TextTrimming="CharacterEllipsis"/>
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>
    </Grid>

有两个问题我解决不了:

  1. 点击其中一项时会显示弹出窗口:

    private void HistoryItemTapped(object sender, TappedRoutedEventArgs e)
    {
        FlyoutBase.GetAttachedFlyout((FrameworkElement)sender).ShowAt((FrameworkElement)sender);
    }
    

    但是,无论我如何设置浮出控件,它始终显示在屏幕顶部,而不是点击的项目上方。为什么?

  2. 浮出控件在不同的 ScrollViewer 上包含两个 TextBlock。其中一个上的文本超出了弹出窗口的宽度,bt 滚动查看器似乎无法正常工作(我无法水平滚动文本块)。这是为什么呢?

【问题讨论】:

    标签: c# wpf xaml windows-phone-8.1


    【解决方案1】:

    所以让我们快速解决这些问题。您的 #1 将是预期的结果,它只是关闭默认的 FlyoutPlacementMode 枚举,其中通常您的浮出控件只是出现在 5 个位置之一的顶部,顶部、底部、左侧、右侧或完整(中心)

    如何修复它,放弃弹出控件,只需为您自己的面板设置动画,以便在点击事件或其他任何事情上执行相同的操作,一点也不难。

    你的#2,如果我没记错的话,ScrollViewer 上的默认值是 HorizontalScrollBarVisibility 之类的默认值是 False。所以只需将 Horizo​​ntalScrollBarVisibility="Auto" 添加到它。

    希望对你有帮助,干杯

    【讨论】:

    • 好的...如果弹出窗口始终显示在屏幕的同一位置,FlyoutBase.ShowAt 应该做什么?
    • 啊,是的,抱歉,可以看出这可能会被误解,而不是屏幕,您只是设置错误,请查看here
    • 能否请您指导我如何修复代码以在单个项目上显示弹出窗口,而不是在屏幕顶部?
    • 不,其实我欠你一个道歉,我直到现在才看到你的东西上的 windows-phone 标签。在这种情况下,您会受到限制,只需要制作自己的快速效果来模拟相同的行为,这也不难,see here 可以完整地写出来,手机有点不同。周五分心:/
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多