显示可点击的文本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
中处理点击似乎并不容易。
你知道什么是最好的方式来呈现一个可点击的文本吗?
谢谢。
如果你想要可点击的文本,你可以重新设计一个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关于可用性的评论)?
如果使用Label
或Hyperlink
在您的情况下不起作用,您可以采用创建新的派生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>
希望这对你有帮助!