0

我试图在运行时使用 runobject 创建一个 TextBlock。我需要文本块来显示以下文本:

点击这里进入下一页。

点击这里应该是一个“链接”,用户可以点击它,他将移动到下一个tabitem ..

我有:

var tbGoToNextTab = new TextBlock
 {
  Content = "Please Click Here to go to next Page.",
  Foreground = new SolidColorBrush(Colors.Black)
 };
 
 tbGoToNextTab .Click +=new RoutedEventHandler(tbGoToNextTab_Click);

我如何才能使 Click Here Clickable、具有下划线和蓝色文本颜色并在单击它时执行操作?

提前致谢

编辑:

我只想要 2 个单词“单击此处”可点击……其余的应该显示为普通文本。我想我应该用内联来做这件事。有什么建议吗?

4

5 回答 5

2

像这样的东西?(未经测试)

var hyperlink    = new HyperLink(new Run("Click Here"));
hyperlink.Click += new RoutedEventHandler(tbGoToNextTab_Click);

var span = new Span();
span.Inlines.Add(new Run("Please "));
span.Inlines.Add(hyperlink);
span.Inlines.Add(new Run(" to go to next Page"));

var tbGoToNextTab = new TextBlock
{
  Content = span,
  Foreground = new SolidColorBrush(Colors.Black)
};
于 2012-11-09T09:04:06.427 回答
1

好的找到答案...

正如我想的那样,我必须使用 Inline 属性..

我在这篇文章中找到了答案:

将超链接添加到来自 Stanislav Kniazev 的 textblock wpf

谢谢大家...

于 2012-11-09T09:03:51.300 回答
0

要管理左键单击操作,请在PreviewMouseLeftButtonDown

tbGoToNextTab.PreviewMouseLeftButtonDown += OntbGoToNextTabPreviewMouseLeftButtonDown;

void OntbGoToNextTabPreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        // write code here...
    }

要管理下划线和颜色更改,请在 xaml 中编写一个Style,在此样式中放置一个Trigger将更改您TextBlockIsMouseOver属性更改的内容。

<Window.Resources>
    <Style x:Key="HyperLinkStyle" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="TextDecorations" Value="Underline" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

tbGoToNextTab.Style = FindResource("HyperLinkStyle") as Style;

您必须专门为可点击文本声明一个 TextBlock,为静态文本声明其他 TextBlock。

于 2012-11-09T08:44:59.517 回答
0

有这样的东西..文本块作为按钮中的内容..使其可点击。

        Canvas pnel = new Canvas();
        var btntab = new Button();
        var tbGoToNextTab1 = new TextBlock();
        var tbGoToNextTab2 = new TextBlock();
        var tbGoToNextTab3 = new TextBlock();
        tbGoToNextTab1.Text = "Please ";
        tbGoToNextTab2.Text = "Click Here";
        tbGoToNextTab3.Text = " to go to next Page.";
        tbGoToNextTab1.Margin = new Thickness(0, 0, 0, 0);
        btntab.Margin = new Thickness(40, 0, 0, 0);
        tbGoToNextTab3.Margin = new Thickness(95, 0, 0, 0);
        tbGoToNextTab1.Foreground = new SolidColorBrush(Colors.Black);
        tbGoToNextTab2.Foreground = new SolidColorBrush(Colors.Black);
        tbGoToNextTab3.Foreground = new SolidColorBrush(Colors.Black);
        btntab.Click += new RoutedEventHandler(btntab_Click);
        btntab.Content = tbGoToNextTab2;
        pnel.Children.Add(tbGoToNextTab1);
        pnel.Children.Add(btntab);
        pnel.Children.Add(tbGoToNextTab3);
        Text112.Children.Add(pnel);
于 2012-11-09T08:43:19.680 回答
0

如果您Click为 处理事件TextBlock,它将处理控件边界内的任意位置的单击。

如果您只需要部分文本可点击,则应HyperlinkTextBlock. 顺便说一句,它还有一个额外的好处是突出显示可点击区域,这样您就不会与不可点击的“点击此处”文字混淆。

这是相关的 WPF 片段:

<TextBlock>
    <Run>Please</Run>
    <Hyperlink>
        <Run Text="Click Here"/>
    </Hyperlink>
    <Run>to go to next Page.</Run>
</TextBlock>
于 2012-11-09T09:05:19.463 回答