Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
ExtendedTextBox.cs
Download fileToto je zdrojový kód souboru ExtendedTextBox.cs
Silverlight TextBox control with Watermark support and IsTabStop settings automatic by IsReadOnly value.
using System; using System.Windows; using System.Windows.Controls; namespace IMP.Windows.Controls { /// <summary> /// TextBox with IsTabStop property settings automatic by IsReadOnly value /// </summary> /// <remarks> /// <c>IsTabStop</c> property settings automatic by <c>IsReadOnly</c> value /// <c>Watermark</c> support /// </remarks> [TemplatePart(Name = "Watermark", Type = typeof(ContentControl))] [TemplateVisualState(Name = "Normal", GroupName = "CommonStates")] [TemplateVisualState(Name = "MouseOver", GroupName = "CommonStates")] [TemplateVisualState(Name = "Disabled", GroupName = "CommonStates")] [TemplateVisualState(Name = "Unfocused", GroupName = "FocusStates")] [TemplateVisualState(Name = "Focused", GroupName = "FocusStates")] [TemplateVisualState(Name = "Unwatermarked", GroupName = "WatermarkStates")] [TemplateVisualState(Name = "Watermarked", GroupName = "WatermarkStates")] public class ExtendedTextBox : TextBox { #region member varible and default property initialization private bool m_NewIsTabStop; #endregion #region constructors and destructors /// <summary> /// ExtendedTextBox control constructor /// </summary> public ExtendedTextBox() { this.DefaultStyleKey = typeof(ExtendedTextBox); m_NewIsTabStop = base.IsTabStop; this.TextChanged += OnTextChanged; SetTabStop(); } #endregion #region action methods /// <summary> /// Called when template is applied to the control. /// </summary> public override void OnApplyTemplate() { base.OnApplyTemplate(); OnWatermarkChanged(); SetWatermarkState(false); } #endregion #region property getters/setters /// <summary> /// Gets or sets a value that indicates whether a control is included in tab navigation. /// </summary> public new bool IsTabStop { get { return m_NewIsTabStop; } set { m_NewIsTabStop = value; SetTabStop(); } } /// <summary> /// IsReadOnly dependency property /// </summary> public new static readonly DependencyProperty IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(ExtendedTextBox), new PropertyMetadata(OnIsReadOnlyPropertyChanged)); /// <summary> /// Gets or sets the value that determines if the user can change the text in the text box. /// </summary> public new bool IsReadOnly { get { return (bool)base.GetValue(IsReadOnlyProperty); } set { base.SetValue(IsReadOnlyProperty, value); } } private static void OnIsReadOnlyPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) { var extendedTextBox = sender as ExtendedTextBox; extendedTextBox.OnIsReadOnlyChanged((bool)args.OldValue, (bool)args.NewValue); } /// <summary> /// IsReadOnly changed /// </summary> protected virtual void OnIsReadOnlyChanged(bool oldValue, bool newValue) { base.IsReadOnly = newValue; SetTabStop(); } /// <summary> /// Watermark dependency property /// </summary> public new static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(object), typeof(ExtendedTextBox), new PropertyMetadata(OnWatermarkPropertyChanged)); /// <summary> /// Watermark content /// </summary> /// <value>The watermark.</value> public new object Watermark { get { return (object)GetValue(WatermarkProperty); } set { SetValue(WatermarkProperty, value); } } private static void OnWatermarkPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) { var extendedTextBox = sender as ExtendedTextBox; extendedTextBox.OnWatermarkChanged(); extendedTextBox.SetWatermarkState(true); } private void OnWatermarkChanged() { var watermarkContentElement = GetTemplateChild("Watermark") as ContentControl; if (watermarkContentElement != null) { var watermarkControl = this.Watermark as Control; if (watermarkControl != null) { watermarkControl.IsTabStop = false; watermarkControl.IsHitTestVisible = false; } } } #endregion #region private member functions /// <summary> /// Overrides OnMouseLeftButtonDown /// </summary> protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e) { base.IsTabStop = true; base.OnMouseLeftButtonDown(e); } /// <summary> /// Overrides OnLostFocus /// </summary> protected override void OnLostFocus(System.Windows.RoutedEventArgs e) { SetTabStop(); base.OnLostFocus(e); } private void OnTextChanged(object sender, TextChangedEventArgs e) { SetWatermarkState(true); } private void SetTabStop() { base.IsTabStop = m_NewIsTabStop && !this.IsReadOnly; } private void SetWatermarkState(bool useTransitions) { // Update the WatermarkStates group if (this.Watermark != null && string.IsNullOrEmpty(this.Text)) { GoToState(this, useTransitions, "Watermarked", "Unwatermarked"); } else { GoToState(this, useTransitions, "Unwatermarked"); } } private static void GoToState(Control control, bool useTransitions, params string[] stateNames) { if (control == null) { throw new ArgumentNullException("control"); } if (stateNames != null) { foreach (string str in stateNames) { if (VisualStateManager.GoToState(control, str, useTransitions)) { return; } } } } #endregion } }