UWP ждать, пока не сработает событие Textbox.

Вот пример коллекции "join" * Актеры и фильмы:

https://github.com/mongodb/cookbook/blob/master/ content / patterns / pivot.txt

Использует метод .mapReduce()

* join - альтернативу объединению в документарно-ориентированных базах данных

0
задан David Hitchen 17 January 2019 в 14:45
поделиться

2 ответа

Ответ очень прост: используйте логический флаг, чтобы различать, когда запускать «красный флаг», а когда зеленый.

0
ответ дан Luca Lindholm 17 January 2019 в 14:45
поделиться

В «реальной жизни» я создавал бы пользовательский элемент управления на основе текстового поля и определял все состояния в Blend и, возможно, добавил грязное состояние или что-то в этом роде и управлял всем этим через логическое свойство. Тем не менее, вот некоторые доказательства концептуального кода, который, кажется, делает то, что я собираю вам нужно. Я думаю, что единственное реальное отличие от того, что вы пытались сделать, это то, что я отслеживаю «старое значение» и сравниваю его, когда текст изменяется, чтобы определить его чистоту. Магический сброс также контролирует это старое значение.

управляющий код:

namespace DirtyTextBox
{
    public class DirtyNotifyingTextBox : TextBox
    {
        public DirtyNotifyingTextBox()
        {
            this.DefaultStyleKey = typeof(TextBox);
            DataContextChanged += DirtyNotifyingTextBox_DataContextChanged;
        }

        private void DirtyNotifyingTextBox_DataContextChanged(Windows.UI.Xaml.FrameworkElement sender, Windows.UI.Xaml.DataContextChangedEventArgs args)
        {
            _originalValue = this.Text;
            TextChanged += DirtyNotifyingTextBox_TextChanged;
            SetToGreen();
        }

        private string _originalValue { get; set; }

        private void DirtyNotifyingTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (this.Text != _originalValue)
            {
                SetToRed();
            }
            else
            {
                SetToGreen();
            }
        }

        private void SetToGreen()
        {
            this.BorderBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 50, 205, 0));
        }

        private void SetToRed()
        {
            this.BorderBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 255, 0, 0));
        }

        public void Reset()
        {
            Reset(string.Empty);
        }

        public void Reset(string resetValue)
        {
            _originalValue = resetValue;
            this.Text = resetValue;
        }

        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
        }
    }
}

пример использования:

<StackPanel Orientation="Horizontal">
    <local:DirtyNotifyingTextBox x:Name="dtextbox" Width="250" Height="50" />
    <Button Content="reset" Click="Reset" Margin="10 0" />
    <Button Content="reset with value" Click="ResetWithValue" Margin="10 0" />
    <Button Content="change text with code" Click="UpdateText" Margin="10 0" />
</StackPanel>

код позади:

private void Reset(object sender, RoutedEventArgs e)
{
    dtextbox.Reset();
}

private void ResetWithValue(object sender, RoutedEventArgs e)
{
    dtextbox.Reset("Magic Reset");
}

private void UpdateText(object sender, RoutedEventArgs e)
{
    dtextbox.Text = "updated text";
}
0
ответ дан Mark W 17 January 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: