WPF цвет фона текстового блока не может связывать переменную - PullRequest
0 голосов
/ 19 сентября 2019

Извините. Я нуб. Я хочу нажать на кнопку, чтобы изменить цвет фона текстового блока.значение переменной может измениться, но цвет фона не изменился. Вот мой код. Пожалуйста, помогите мне.

Visual studio 2017

введите описание изображения здесь

WPF

Текстовый блок

<TextBlock Width="75" Height="75" HorizontalAlignment="Center" Margin="205,187,626,468" FontSize="48">
        <TextBlock.Style>
            <Style TargetType="TextBlock">

                <Setter Property="Text" Value="1" />
                <Setter Property="Background" Value="Red" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=TestView,Mode=TwoWay}" Value="True">
                        <Setter Property="Text" Value="1" />
                        <Setter Property="Background" Value="Green" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>

и Кнопка

<Button Margin="202,596,564,0" VerticalAlignment="Top" Width="134" Click="buttonClick"> </Button>

Xaml.cs

private bool testView = true;
    public bool TestView
    {
        get { return testView; }
        set { testView = value; }
    }

    private void buttonClick(object sender, RoutedEventArgs e)
    {
        TestView = false;
    }

Я ожидаю, что когда testView == true, цвет фона текстового блока будет зеленым, когда testView == false, цвет фона текстового блока - красный.и текст находится в середине TextBlock

1 Ответ

1 голос
/ 19 сентября 2019

Причина, по которой окно (представление) не обновляется, заключается в том, что вам необходимо уведомить его об изменении.Чтобы сделать это в WPF, вы должны реализовать интерфейс INotifyPropertyChanged и соответственно установить DataContext.Как правило, это должно быть сделано с использованием шаблона проектирования MVVM, но для ответа на ваш вопрос вот как это сделать с текущей настройкой:

  public partial class Window1 : Window, INotifyPropertyChanged
    {
        private bool testView = true;
        public bool TestView
        {
            get { return testView; }
            set 
            { 
                if (testView != value)
                {
                    testView = value;
                    OnPropertyChanged("TestView");
                }
            }
        }

        public Window1()
        {
            InitializeComponent();
            DataContext = this;
        }

        private void buttonClick(object sender, RoutedEventArgs e)
        {
            TestView = false;
        }

        #region INotify
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion INotify
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...