我想向我的TextBlock
添加弹出控件,当我在TextBlock中选择文本时,弹出控件将显示在选定的位置(类似于Microsoft Edge中的阅读模式,当您选择文本时)在阅读模式下,将弹出显示单词的定义)。但是我不知道如何。我尝试使用SelectionChanged
,但是此事件传递的参数没有位置可用于设置flyout
。那我该怎么办呢?
此外,我想知道SelectionFlyout
是做什么用的?我认为这可以帮助我。
这是我的代码:
<TextBlock x:Name="webviewtest" Grid.Row="1" Text="This is a select-flyout test." FontSize="300" IsTextSelectionEnabled="true" >
<TextBlock.SelectionFlyout>
<Flyout>
<TextBlock Text="this is the flyout"></TextBlock>
</Flyout>
</TextBlock.SelectionFlyout>
</TextBlock>
当我选择文本时,弹出按钮从未显示出来。显然我一直在用错它。所以我检查了Microsoft Docs,它说
获取或设置在选择文本时显示的弹出窗口;如果未显示弹出窗口,则为null。
我在网上找不到有关此的任何示例。
答案 0 :(得分:0)
这可以通过将TextBlock IsTextSelectionEnabled
设置为True
并使用MenuFlyout
来显示选定的文本来实现。
XAML
<TextBlock x:Name="webviewtest" Text="This is a select-flyout test." FontSize="100" IsTextSelectionEnabled="True" RightTapped="webviewtest_RightTapped">
<FlyoutBase.AttachedFlyout>
<MenuFlyout x:Name="Flyout">
<MenuFlyout.Items>
<MenuFlyoutItem x:Name="FlyItem" Text="">
</MenuFlyoutItem>
</MenuFlyout.Items>
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</TextBlock>
C#
private void webviewtest_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
TextBlock tb = sender as TextBlock;
if (tb.SelectedText.Length > 0)
{
Item.Text = tb.SelectedText;
}
// Show at cursor position
Flyout.ShowAt(sender as UIElement, e.GetPosition(sender as UIElement));
}
答案 1 :(得分:0)
您需要使用RichTextBlock替换TextBlock,并且平台为17134或更高版本。
<RichTextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
IsTextSelectionEnabled="True">
<RichTextBlock.ContextFlyout>
<Flyout>
<TextBlock Text="flyout" />
</Flyout>
</RichTextBlock.ContextFlyout>
<RichTextBlock.SelectionFlyout>
<Flyout>
<TextBlock Text="this is the flyout" />
</Flyout>
</RichTextBlock.SelectionFlyout>
<Paragraph>
welcome to blog.lindexi.com that has many blogs
</Paragraph>
</RichTextBlock>
SelectionFlyout与您保持联系。 TextBlock.SelectionFlyout不起作用·问题#452·Microsoft / microsoft-ui-xaml
中的所有代码