پرشین تم مقالات افزودن placeholder به TextBox در WPF

افزودن placeholder به TextBox در WPF

image profile پرشین تم - 05 دی 1403 - 04:27 دانلود مقاله

برای افزودن placeholder به TextBox در WPF، می‌توانید از Adorner یا TextBox با رفتار سفارشی استفاده کنید. در اینجا چند راه برای رسیدن به این هدف وجود دارد:

افزودن placeholder به TextBox در WPF

 

روش 1: استفاده از Adorner

1. یک کلاس PlaceholderAdorner ایجاد کنید:

کلاسی را تعریف کنید که متن محل نگهدارنده را مدیریت کند:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;

public class PlaceholderAdorner : Adorner
{
    private readonly TextBlock _placeholderTextBlock;

    public PlaceholderAdorner(UIElement adornedElement, string placeholderText) : base(adornedElement)
    {
        _placeholderTextBlock = new TextBlock
        {
            Text = placeholderText,
            Foreground = Brushes.Gray,
            Margin = new Thickness(5, 0, 0, 0)
        };
        (adornedElement as TextBox).TextChanged += (s, e) => InvalidateVisual();
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        if ((AdornedElement as TextBox).Text.Length == 0)
        {
            var desiredSize = _placeholderTextBlock.DesiredSize;
            drawingContext.DrawText(
                new FormattedText(
                    _placeholderTextBlock.Text,
                    System.Globalization.CultureInfo.CurrentUICulture,
                    FlowDirection.LeftToRight,
                    new Typeface(_placeholderTextBlock.FontFamily, _placeholderTextBlock.FontStyle, _placeholderTextBlock.FontWeight, _placeholderTextBlock.FontStretch),
                    _placeholderTextBlock.FontSize,
                    _placeholderTextBlock.Foreground
                ),
                new Point(5, (AdornedElement.RenderSize.Height - desiredSize.Height) / 2)
            );
        }
    }
}

2. Adorner را به TextBox وصل کنید:

Adorner را به TextBox خود در کد اضافه کنید:

using System.Windows;

namespace YourNamespace
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var placeholderAdorner = new PlaceholderAdorner(MyTextBox, "Enter text here");
            AdornerLayer.GetAdornerLayer(MyTextBox).Add(placeholderAdorner);
        }
    }
}

3. MainWindow.xaml:

مطمئن شوید که یک TextBox به نام MyTextBox در XAML خود دارید:

<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Width="200" Height="30" Margin="10" Name="MyTextBox"/>
    </Grid>
</Window>

 

روش 2: کنترل TextBox سفارشی

1. یک کنترل TextBox سفارشی ایجاد کنید:

یک کنترل سفارشی که متن placeholder را مدیریت می‌کند تعریف کنید:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

public class WatermarkTextBox : TextBox
{
    public static readonly DependencyProperty WatermarkProperty =
        DependencyProperty.Register("Watermark", typeof(string), typeof(WatermarkTextBox), new PropertyMetadata(string.Empty));

    public string Watermark
    {
        get { return (string)GetValue(WatermarkProperty); }
        set { SetValue(WatermarkProperty, value); }
    }

    public WatermarkTextBox()
    {
        this.GotFocus += RemovePlaceholder;
        this.LostFocus += ShowPlaceholder;
    }

    private void RemovePlaceholder(object sender, RoutedEventArgs e)
    {
        if (this.Text == Watermark)
        {
            this.Text = string.Empty;
            this.Foreground = Brushes.Black;
        }
    }

    private void ShowPlaceholder(object sender, RoutedEventArgs e)
    {
        if (string.IsNullOrEmpty(this.Text))
        {
            this.Text = Watermark;
            this.Foreground = Brushes.Gray;
        }
    }

    protected override void OnInitialized(EventArgs e)
    {
        base.OnInitialized(e);
        ShowPlaceholder(null, null);
    }
}

2. از کنترل سفارشی در XAML استفاده کنید:

کنترل سفارشی را به MainWindow.xaml خود اضافه کنید:

<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:YourNamespace"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <local:WatermarkTextBox Width="200" Height="30" Margin="10" Watermark="Enter text here"/>
    </Grid>
</Window>

با استفاده از روش Adorner یا کنترل TextBox سفارشی، می توانید متن مکان نگهدار را به TextBox در WPF اضافه کنید.

با خرید اشتراک می توانید تا چندین برابر مبلغ خرید اشتراک خود قالب های HTML ، سورس کدهای آماده و یا مقالات دانلود کنید
شما می توانید تنها فقط با مبلغ 3,000,000 میلیون تومان وب سایت سفارسی برای خود داشته باشید
محبوب ترین مقالات
تفاوت بین CSS و SCSS چیست؟ تفاوت بین CSS و SCSS چیست؟
category برنامه نویسی 07 اسفند 1402
تفاوت بین RDBMS و DBMS تفاوت بین RDBMS و DBMS
category برنامه نویسی 02 فروردین 1403
کاوش در معماری GPT-3 کاوش در معماری GPT-3
category هوش مصنوعی 12 اسفند 1402
کلمات کلیدی در SQL کلمات کلیدی در SQL
category برنامه نویسی 01 خرداد 1403
تفاوت بین CSS، SASS و SCSS چیست؟ تفاوت بین CSS، SASS و SCSS چیست؟
category برنامه نویسی 13 اسفند 1402
انواع Join در SQL انواع Join در SQL
category برنامه نویسی 02 فروردین 1403
ChatGPT چیست؟ ChatGPT چیست؟
category هوش مصنوعی 12 اسفند 1402
آخرین مقالات
Redis چیست؟ آموزش استفاده از آن در asp core Redis چیست؟ آموزش استفاده از آن در asp core Redis یک مخزن داده با عملکرد بالا و کلید-مقدار در حافظه است که اغلب برای ذخیره‌سازی موقت (caching)، مدیریت جلسه (sessi...
category برنامه نویسی 27 شهریور 1404
CI-CD در فلاتر چیست؟ CI-CD در فلاتر چیست؟ در توسعه فلاتر، CI/CD مخفف Continuous Integration (ادغام مداوم) و Continuous Delivery/Deployment (تحویل/استقرار مداوم)...
category برنامه نویسی 25 شهریور 1404
🧩 CQRS چیست؟ 🧩 CQRS چیست؟ هرCQRS یک الگوی طراحی نرم‌افزار است که عملیات خواندن (پرس‌وجوها) را از عملیات نوشتن (دستورات) جدا می‌کند. به جای استفا...
category برنامه نویسی 24 شهریور 1404