260 lines
7.5 KiB
C#
260 lines
7.5 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Data;
|
||
using System.Windows.Documents;
|
||
using System.Windows.Input;
|
||
using System.Windows.Media;
|
||
using System.Windows.Media.Imaging;
|
||
using System.Windows.Navigation;
|
||
using System.Windows.Shapes;
|
||
using System.Globalization;
|
||
|
||
|
||
namespace MetroGauges
|
||
{
|
||
/// <summary>
|
||
/// UserControl1.xaml 的交互逻辑
|
||
/// </summary>
|
||
public partial class TreeNodeEdit : UserControl
|
||
{
|
||
|
||
public event EventHandler<NodeCheckInputArgs> NodeUpdated;
|
||
|
||
private bool isCancel = false;
|
||
//public static readonly RoutedEvent NodeUpdatedRoutedEvent =
|
||
// EventManager.RegisterRoutedEvent("NodeUpdatedHandle", RoutingStrategy.Bubble, typeof(EventHandler), typeof(TreeNodeEdit));
|
||
|
||
//public event EventHandler NodeUpdated //自定义事件,通过自定义时间为路由事件RunRoutedEvent加载、卸载方法
|
||
//{
|
||
// add { this.AddHandler(NodeUpdatedRoutedEvent, value); }
|
||
// remove { this.RemoveHandler(NodeUpdatedRoutedEvent, value); }
|
||
//}
|
||
|
||
|
||
#region Constructor
|
||
|
||
public TreeNodeEdit()
|
||
{
|
||
InitializeComponent();
|
||
base.Focusable = true;
|
||
base.FocusVisualStyle = null;
|
||
this.Loaded += new RoutedEventHandler(TreeNodeEdit_Loaded);
|
||
|
||
}
|
||
|
||
void TreeNodeEdit_Loaded(object sender, RoutedEventArgs e)
|
||
{
|
||
//if (OnlyRemark)
|
||
//{
|
||
// ContentPresenter contentpresenter = AppUtility.SearchVisualTree<ContentPresenter>(this);
|
||
// DataTemplate MyDataTemplate = contentpresenter.ContentTemplate;
|
||
// TextBlock myRemarkBlock= MyDataTemplate.FindName("txtRemark", contentpresenter) as TextBlock;
|
||
// TextBlock myTextBlock = MyDataTemplate.FindName("txtText", contentpresenter) as TextBlock;
|
||
// if (myRemarkBlock == null || myTextBlock == null) return;
|
||
// if (!string.IsNullOrWhiteSpace(myRemarkBlock.Text))
|
||
// myTextBlock.Visibility = System.Windows.Visibility.Collapsed;
|
||
|
||
//}
|
||
}
|
||
|
||
#endregion Constructor
|
||
|
||
#region Member Variables
|
||
|
||
// We keep the old text when we go into editmode
|
||
// in case the user aborts with the escape key
|
||
private string oldText;
|
||
|
||
#endregion Member Variables
|
||
|
||
#region Properties
|
||
|
||
|
||
public bool OnlyRemark
|
||
{
|
||
get
|
||
{
|
||
return (bool)GetValue(OnlyRemarkProperty);
|
||
}
|
||
set { SetValue(OnlyRemarkProperty, value); }
|
||
}
|
||
public static readonly DependencyProperty OnlyRemarkProperty =
|
||
DependencyProperty.Register(
|
||
"OnlyRemark",
|
||
typeof(bool),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata(false));
|
||
|
||
public string ImageSource
|
||
{
|
||
get { return (string)GetValue(ImageSourceProperty); }
|
||
set { SetValue(ImageSourceProperty, value); }
|
||
}
|
||
public static readonly DependencyProperty ImageSourceProperty =
|
||
DependencyProperty.Register(
|
||
"ImageSource",
|
||
typeof(string),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata(""));
|
||
|
||
public string Text
|
||
{
|
||
get {
|
||
return (string)GetValue(TextProperty);
|
||
}
|
||
set { SetValue(TextProperty, value); }
|
||
}
|
||
public static readonly DependencyProperty TextProperty =
|
||
DependencyProperty.Register(
|
||
"Text",
|
||
typeof(string),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata(""));
|
||
|
||
public string Desctrition
|
||
{
|
||
get { return (string)GetValue(DesctritionProperty); }
|
||
set { SetValue(DesctritionProperty, value); }
|
||
}
|
||
public static readonly DependencyProperty DesctritionProperty =
|
||
DependencyProperty.Register(
|
||
"Desctrition",
|
||
typeof(string),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata(""));
|
||
|
||
public bool IsEditable
|
||
{
|
||
get { return (bool)GetValue(IsEditableProperty); }
|
||
set { SetValue(IsEditableProperty, value); }
|
||
}
|
||
public static readonly DependencyProperty IsEditableProperty =
|
||
DependencyProperty.Register(
|
||
"IsEditable",
|
||
typeof(bool),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata(true));
|
||
|
||
public bool IsInEditMode
|
||
{
|
||
get
|
||
{
|
||
if (IsEditable)
|
||
return (bool)GetValue(IsInEditModeProperty);
|
||
else
|
||
return false;
|
||
}
|
||
set
|
||
{
|
||
if (IsEditable)
|
||
{
|
||
if (value) oldText = Text;
|
||
SetValue(IsInEditModeProperty, value);
|
||
}
|
||
}
|
||
}
|
||
public static readonly DependencyProperty IsInEditModeProperty =
|
||
DependencyProperty.Register(
|
||
"IsInEditMode",
|
||
typeof(bool),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata(false));
|
||
|
||
public string TextFormat
|
||
{
|
||
get { return (string)GetValue(TextFormatProperty); }
|
||
set
|
||
{
|
||
if (value == "") value = "{0}";
|
||
SetValue(TextFormatProperty, value);
|
||
}
|
||
}
|
||
public static readonly DependencyProperty TextFormatProperty =
|
||
DependencyProperty.Register(
|
||
"TextFormat",
|
||
typeof(string),
|
||
typeof(TreeNodeEdit),
|
||
new PropertyMetadata("{0}"));
|
||
|
||
public string FormattedText
|
||
{
|
||
get { return String.Format(TextFormat, Text); }
|
||
}
|
||
|
||
#endregion Properties
|
||
|
||
#region Event Handlers
|
||
|
||
// Invoked when we enter edit mode.
|
||
void TextBox_Loaded(object sender, RoutedEventArgs e)
|
||
{
|
||
TextBox txt = sender as TextBox;
|
||
|
||
// Give the TextBox input focus
|
||
txt.Focus();
|
||
|
||
txt.SelectAll();
|
||
}
|
||
|
||
// Invoked when we exit edit mode.
|
||
void TextBox_LostFocus(object sender, RoutedEventArgs e)
|
||
{
|
||
|
||
this.IsInEditMode = false;
|
||
e.Handled = true;
|
||
|
||
|
||
if (NodeUpdated != null && !isCancel)
|
||
NodeUpdated(this, new NodeCheckInputArgs() { OldText = oldText,NewText =Text });
|
||
|
||
isCancel = false;
|
||
}
|
||
|
||
// Invoked when the user edits the annotation.
|
||
void TextBox_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.Key == Key.Enter)
|
||
{
|
||
this.IsInEditMode = false;
|
||
e.Handled = true;
|
||
|
||
}
|
||
else if (e.Key == Key.Escape)
|
||
{
|
||
this.IsInEditMode = false;
|
||
Text = oldText;
|
||
e.Handled = true;
|
||
isCancel = true;
|
||
}
|
||
}
|
||
|
||
#endregion Event Handlers
|
||
}
|
||
|
||
//定义值转换器
|
||
[ValueConversion(typeof(string), typeof(string))]
|
||
public class TextVisibleConvert : IValueConverter
|
||
{
|
||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||
{
|
||
|
||
|
||
return "Visible";
|
||
}
|
||
|
||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||
{
|
||
|
||
return "";
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|