我有以下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>
我无法解决两个问题:
点击其中一项时会显示弹出按钮:
private void HistoryItemTapped(object sender, TappedRoutedEventArgs e)
{
FlyoutBase.GetAttachedFlyout((FrameworkElement)sender).ShowAt((FrameworkElement)sender);
}
然而,无论我如何设置弹出窗口,它总是显示在屏幕顶部,而不是在点击项目上。为什么呢?
弹出按钮在单独的ScrollViewers上包含两个TextBlock。其中一个上的文本超出了弹出窗口的宽度,但是滚动查看器似乎没有工作(我无法水平滚动文本块)。那是为什么?
答案 0 :(得分:1)
所以,让我们快速敲出这些。你的#1将是预期的结果,它只是偏离默认的FlyoutPlacementMode枚举,其中通常你的弹出窗口只是出现在5个点之一的顶部,顶部,底部,左,右,或完整(中心)
如何解决它,抛弃弹出控件,只需动画你自己的面板就可以在点击事件或其他任何事情上做同样的事情,而不是很难。
你的#2,如果我没记错,ScrollViewer
上的默认值是HorizontalScrollBarVisibility
默认为False。所以只需添加HorizontalScrollBarVisibility =&#34; Auto&#34;它。
希望这会有所帮助,欢呼