我想在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
中的点击并不容易。
任何想法提供可点击文字的最佳方式是什么。
感谢。
答案 0 :(得分:18)
如果您想要可点击的文字,您只需重新设置Button
:
<Button Content="Text here" Click="Click_Handler">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<ContentPresenter />
</ControlTemplate>
</Button.Template>
</Button>
答案 1 :(得分:17)
您可以在Textblock中嵌入超链接,如本例所示
<TextBlock>
<Hyperlink NavigateUri="Reviews.xaml">Click Me </Hyperlink>
</TextBlock>
您还可以处理超链接Click事件以调用Navigate例如
答案 2 :(得分:2)
为什么不使用Label
并监听MouseDoubleClick
事件(尽管我同意Xin对可用性的评论)?
答案 3 :(得分:1)
如果使用Label
或Hyperlink
在您的情况下不起作用,您可以采用创建新的派生TextBlock
的方法来简单定义新{{1}通过树冒泡的路由事件:
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
希望这有帮助!