Как обновить цвет метки Fore.Color при изменении его текста ... с помощью кода C # в WPF - PullRequest
1 голос
/ 10 марта 2019

У меня есть динамический контент для метки в WPF. Как я могу изменить цвет метки переднего плана при изменении текста метки, у меня есть код для Winform, но он мне нужен для WPF .. Код Winform на стороне дизайнера

this.lblSolar.Name= "lblSolar";
this.lblSolar.TextChanged + = new System.EventHandler(this.LblSolar_TextChanged);

Код функции text_Changed

private void LblSolar_TextChanged(object sender, EventArgs e)
{
var solarCurrent= Convert.ToDouble(_sValues[(int)ValueOfRTC.SupplyCurrent]);
if (supplyCurrent < 1)
{
lblSupply.ForeColor= Color.Yellow;
}
else
{
// Assigning other colors.....
}
}

Но я не смог найти свойство "TextChanged" в WPF XAML ... тогда что такое решение? Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 11 марта 2019

В WPF метка - это не только элемент управления для представления текста. Это ContentPresenter, который может отображать все виды элементов управления, кроме текста. Таким образом, у него нет события изменения текста. Вообще говоря, вы не должны использовать события таким же образом при использовании WPF, как вы использовали с winforms. Вы должны подумать о том, чтобы начать использовать шаблон MVVM, так как это сделает вашу жизнь намного проще в долгосрочной перспективе (после грубого старта).

Однако, если вы настаиваете на событиях usng, чтобы сделать это, вам НУЖНО использовать текстовое поле ... НО вы можете сделать текстовое поле похожим на метку, подобную этой:

this.lblSolar.Name= "lblSolar";
this.lblSolar.TextChanged + = new System.EventHandler(this.LblSolar_TextChanged);
this.lblSolar.BorderThickness = 0;
this.lblSolar.Background = System.Drawing.Color.Transparent;
this.lblSolar.IsReadOnly = True; 
2 голосов
/ 10 марта 2019

Используйте TextBox вместо метки

vb.net

Private Sub TextBox1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextBox1.TextChanged
    TextBox1.Foreground = Brushes.Yellow
End Sub

C #

 private void TextBox1_TextChanged(object sender, TextChangedEventArgs e) {
    TextBox1.Foreground = Brushes.Yellow;
}
1 голос
/ 11 марта 2019

То, что сказал Денис, верно. Если вы все еще хотите добиться этого с помощью Label, вы можете просто получить свой собственный элемент управления Label, который предоставляет событие ContentChanged, подобное этому.

public class MyLabel : Label
{
    static MyLabel()
    {
        ContentProperty.OverrideMetadata(typeof(MyLabel),
            new FrameworkPropertyMetadata(
                new PropertyChangedCallback(OnContentChanged)));
    }

    private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MyLabel lbl = d as MyLabel;
        if (lbl.ContentChanged != null)
        {
            DependencyPropertyChangedEventArgs args = new DependencyPropertyChangedEventArgs( ContentProperty, e.OldValue, e.NewValue);
            lbl.ContentChanged(lbl, args);
        }
    }

    public event DependencyPropertyChangedEventHandler ContentChanged;
}

Вы можете использовать это в XAML следующим образом.

<local:MyLabel Content="Sample" ContentChanged="MyLabel_ContentChanged"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...