Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在选中文本块中的文本的位置显示弹出型按钮_C#_Xaml_Uwp_Textblock_Flyout - Fatal编程技术网

C# 如何在选中文本块中的文本的位置显示弹出型按钮

C# 如何在选中文本块中的文本的位置显示弹出型按钮,c#,xaml,uwp,textblock,flyout,C#,Xaml,Uwp,Textblock,Flyout,我想在我的文本块中添加一个弹出按钮,当我在文本块中选择文本时,弹出按钮将显示在Microsoft Edge中选定的类似阅读模式下,当你在阅读模式下选择文本时,弹出按钮将显示单词的定义。但我不知道怎么做。我已尝试使用SelectionChanged,但此事件传递的参数没有可用于设置弹出按钮的位置。那我该怎么做呢? 另外,我想知道SelectionFlyout是做什么用的?我想这对我有帮助。 这是我的密码: <TextBlock x:Name="webviewtest" Grid.Row="1

我想在我的文本块中添加一个弹出按钮,当我在文本块中选择文本时,弹出按钮将显示在Microsoft Edge中选定的类似阅读模式下,当你在阅读模式下选择文本时,弹出按钮将显示单词的定义。但我不知道怎么做。我已尝试使用SelectionChanged,但此事件传递的参数没有可用于设置弹出按钮的位置。那我该怎么做呢? 另外,我想知道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>
当我选择文本时,弹出按钮从未出现。很明显我用错了。所以我查了一下,它说

获取或设置选定文本时显示的弹出按钮,如果未显示弹出按钮,则为null


我在网上找不到任何关于此的示例。

这可以通过将TextBlock IsTextSelectionEnabled设置为True并使用MenuFlyout显示所选文本来实现

XAML


您需要使用RichTextBlock替换TextBlock,平台为17134和laster

    <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>
Selection弹出按钮为work in touch。TextBlock.SelectionFlyout不工作·问题452·Microsoft/Microsoft ui xaml

所有的代码都在


抱歉,我错误地删除了问题中的IsTextSelectionEnabled属性,我的代码中有该属性。这不是解决办法。我已经试过你的方法了。首先,弹出按钮显示在文本块上,但不显示在所选文本上。这听起来可能很混乱,我应该说我希望它显示在光标所在的位置。第二,弹出按钮在文本突出显示后显示,因为SelectionChange在突出显示之前触发。我尝试使用“点击”事件。但是由于我的文本块是可选择的,所以除了RightTapped事件之外,没有触发任何“Tapped”事件。啊,我现在看到你的问题了。使用RightTapped事件有什么问题?您当然可以从中获得光标位置。需要有一个用户操作,即点击、双击、右击,在选择文本后,才能按您希望的方式进行操作。我将基于此更新我的答案,以防将来它可能对您或其他人有所帮助。因为RightTapped需要正确的点击,这不是我想要显示弹出按钮的方式。我想实现的是,在选定一些文本并释放鼠标或手指后显示一个弹出按钮,@Hongjia您可以使用TextBlock.SelectionFlyout[TextBlock.SelectionFlyout不工作·问题452·Microsoft/Microsoft ui xaml]它在touch中工作,但在我右键单击或长按触摸时会显示弹出按钮,在我选择文本并突出显示后,弹出按钮是否会立即显示,或者只是使用触摸屏进行简单触摸?
    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));
    }
    <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>