none
在TextBlock中选中文字并在鼠标的位置出现flyout控件 RRS feed

  • 问题

  • 如题,我需要在TextBlock中进行文字选中,并且选中后弹出一个Flyout(就像Microsoft Edge中进入阅读模式选中词语后自动出现一个Flyout显示词语的英文解释)。但现在问题是,当我设置了SelectionChanged的事件时,这个事件是在文本还没有被高亮之前就发生。而且Flyout也无法显示在我鼠标所属的位置。以下是我的代码:

            <TextBlock x:Name="webviewtest" Text="This is a select-flyout test." FontSize="100"  IsTextSelectionEnabled="True" SelectionChanged="webviewtest_SelectionChanged">
            <FlyoutBase.AttachedFlyout>
                <MenuFlyout x:Name="Flyout">
                    <MenuFlyout.Items>
                        <MenuFlyoutItem x:Name="FlyItem" Text="">
                        </MenuFlyoutItem>
                    </MenuFlyout.Items>
                </MenuFlyout>
            </FlyoutBase.AttachedFlyout>
            </TextBlock>

            private void webviewtest_SelectionChanged(object sender, RoutedEventArgs e)
            {
                TextBlock tb = sender as TextBlock;
    
                if (tb.SelectedText.Length > 0)
                {
                    FlyItem.Text = tb.SelectedText;
                }
                
                Flyout.ShowAt(webviewtest);
            }

    2019年3月13日 15:30

全部回复

  • 你好,

    这是必然的行为,因为selectionchanged是用来监控selectionchanged,所以当你第一次开始选的时候你的行为已经需要被监听了。要解决这个问题,直接用richtextblock

    https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.richtextblock

    你会看到SelectionFlyout已经给你封装好了,用就行了。


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2019年3月25日 5:51