显示可点击的文本WPF

本文关键字:文本 WPF 显示 | 更新日期: 2023-09-27 18:11:59

我想在GUI中呈现一些文本,并让用户能够双击它。我想抓住这个事件并处理它。

我想这样做:

 <TextBlock   
        Height="39" 
        TextElement.FontSize="18" 
        FontFamily="Verdana"
        HorizontalAlignment="Left"
        VerticalAlignment="Center"
        Name="Filelink"
        Padding="5,0,0,0"
        TextDecorations="Underline"
        Text="{Binding Path=FilePath}"/>

但是在TextBlock中处理点击似乎并不容易。

你知道什么是最好的方式来呈现一个可点击的文本吗?

谢谢。

显示可点击的文本WPF

如果你想要可点击的文本,你可以重新设计一个Button:

<Button Content="Text here" Click="Click_Handler">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <ContentPresenter />
        </ControlTemplate>
    </Button.Template>
</Button>

可以在Textblock中嵌入超链接,如下例

<TextBlock>
    <Hyperlink NavigateUri="Reviews.xaml">Click Me </Hyperlink>
</TextBlock>

您还可以处理超链接点击事件来调用导航,例如

为什么不直接使用Label并收听MouseDoubleClick事件(尽管我同意Xin关于可用性的评论)?

如果使用LabelHyperlink在您的情况下不起作用,您可以采用创建新的派生TextBlock的方法,该方法只需定义一个新的DoubleClick路由事件,该事件通过树向上冒出来:

public class ClickableTextBlock : TextBlock
{
    #region Overrides
    protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
    {
        base.OnMouseLeftButtonDown(e);
        if (e.ClickCount == 2)
        {
            RaiseEvent(new RoutedEventArgs(DoubleClickEvent, this));
        }
    }
    #endregion
    #region DoubleClick RoutedEvent
    public static readonly RoutedEvent DoubleClickEvent = EventManager.RegisterRoutedEvent("DoubleClick",
        RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ClickableTextBlock));
    public event RoutedEventHandler DoubleClick
    {
        add { AddHandler(DoubleClickEvent, value); }
        remove { RemoveHandler(DoubleClickEvent, value); }
    }
    #endregion
}

该控件的使用方式与标准TextBlock相同。在本例中,双击TextBlock将引发DoubleClick事件,然后由父StackPanel执行该事件以启动动画:

<StackPanel x:Name="myStackPanel" Background="LightGreen">
        <StackPanel.Triggers>
            <EventTrigger RoutedEvent="l:ClickableTextBlock.DoubleClick">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                         Duration="0:0:1"
                                         To="0.5"
                                         FillBehavior="Stop"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </StackPanel.Triggers>
        <l:ClickableTextBlock HorizontalAlignment="Center"
                              VerticalAlignment="Center"
                              Background="LightPink"
                              Text="Double Click to change parent's opacity" />
    </StackPanel>

希望这对你有帮助!