47 lines
1.9 KiB
C#
47 lines
1.9 KiB
C#
using System.Diagnostics;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using HandyControl.Interactivity;
|
|
|
|
namespace HandyControl.Controls
|
|
{
|
|
public class LinkElement
|
|
{
|
|
public static readonly DependencyProperty LinkProperty = DependencyProperty.RegisterAttached(
|
|
"Link", typeof(string), typeof(LinkElement), new PropertyMetadata(default(string), OnLinkChanged));
|
|
|
|
private static void OnLinkChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is UIElement element)
|
|
{
|
|
CreateTrriger(element, (string) e.NewValue);
|
|
}
|
|
}
|
|
|
|
private static readonly DependencyProperty CommandBindingProperty = DependencyProperty.RegisterAttached(
|
|
"CommandBinding", typeof(CommandBinding), typeof(LinkElement), new PropertyMetadata(default(CommandBinding)));
|
|
|
|
private static void SetCommandBinding(DependencyObject element, CommandBinding value)
|
|
=> element.SetValue(CommandBindingProperty, value);
|
|
|
|
private static CommandBinding GetCommandBinding(DependencyObject element)
|
|
=> (CommandBinding) element.GetValue(CommandBindingProperty);
|
|
|
|
private static void CreateTrriger(UIElement element, string link)
|
|
{
|
|
element.CommandBindings.Remove(GetCommandBinding(element));
|
|
SetCommandBinding(element, null);
|
|
|
|
if (string.IsNullOrEmpty(link)) return;
|
|
var commandBinding = new CommandBinding(ControlCommands.OpenLink, (sender, args) => Process.Start(link));
|
|
SetCommandBinding(element, commandBinding);
|
|
element.CommandBindings.Add(commandBinding);
|
|
}
|
|
|
|
public static void SetLink(DependencyObject element, string value)
|
|
=> element.SetValue(LinkProperty, value);
|
|
|
|
public static string GetLink(DependencyObject element)
|
|
=> (string) element.GetValue(LinkProperty);
|
|
}
|
|
} |