Wpf 前景属性颜色

Wpf 前景属性颜色,wpf,foreground,Wpf,Foreground,XAML: 这是一个使用ViewModel的有效解决方案,允许您通过更改列表框选择来更改文本框的颜色 这是.xaml代码: SolidColorBrush bb = new SolidColorBrush(); 这是您的ViewModel类: public partial class MainWindow : Window { VM data = new VM(); public MainWindow() { InitializeComponent(); For

XAML:


这是一个使用ViewModel的有效解决方案,允许您通过更改列表框选择来更改文本框的颜色

这是.xaml代码:

SolidColorBrush bb = new SolidColorBrush();
这是您的ViewModel类:

public partial class MainWindow : Window
{
  VM data = new VM();

  public MainWindow()
  {
    InitializeComponent();

    ForegroundChooser.SelectedIndex = 0;
    this.DataContext = data;
  }

  private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    if (ForegroundChooser.SelectedIndex == 0) data.color = new SolidColorBrush(Colors.Green);
    if (ForegroundChooser.SelectedIndex == 1) data.color = new SolidColorBrush(Colors.Blue);
    if (ForegroundChooser.SelectedIndex == 2) data.color = new SolidColorBrush(Colors.Red);
  }
}

您需要做的是创建ViewModel类的实例,并将.xaml
DataContext
设置为它。创建要绑定到的值的私有实例(例如
\u color
),然后使用
get
和可选的
set
方法为该值创建公共方法(
color
)。绑定到公共实例(
前台=“{Binding color}”
)。在
set
中,您需要调用
OnPropertyChanged(“value”)
通知绑定值已更改。

我已重新格式化了您的问题。此外,我还更新了您的标记—您在这里询问的是一个特定的UI工具包(WPF),而代码背后的实际语言应该相对不相关。在任何情况下(即使这里是C#这一事实是相关的),语言应该在标签中指明,而不是问题标题。这里有很多你没有告诉我们的。您使用的是MVVM框架还是仅仅绑定到后面的代码?如果您使用的是视图模型,它是否实现了
INotifyPropertyChanged
?等
<Grid>
    <StackPanel>
        <TextBlock Foreground="{Binding color}" Text="This is a test." FontSize="50" HorizontalAlignment="Center"/>

        <ListBox SelectionChanged="ListBox_SelectionChanged" Name="ForegroundChooser">
            <ListBoxItem Content="Green"/>
            <ListBoxItem Content="Blue"/>
            <ListBoxItem Content="Red"/>
        </ListBox>
    </StackPanel>
</Grid>
public partial class MainWindow : Window
{
  VM data = new VM();

  public MainWindow()
  {
    InitializeComponent();

    ForegroundChooser.SelectedIndex = 0;
    this.DataContext = data;
  }

  private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    if (ForegroundChooser.SelectedIndex == 0) data.color = new SolidColorBrush(Colors.Green);
    if (ForegroundChooser.SelectedIndex == 1) data.color = new SolidColorBrush(Colors.Blue);
    if (ForegroundChooser.SelectedIndex == 2) data.color = new SolidColorBrush(Colors.Red);
  }
}
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace WpfApplication1
{
  class VM : INotifyPropertyChanged
  {
    private SolidColorBrush _color;
    public SolidColorBrush color
    {
      get { return _color; }
      set
      {
        if (_color == value)
          return;
        else _color = value;
        OnPropertyChanged("color");
      }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
      PropertyChangedEventHandler handler = PropertyChanged;
      if (handler != null)
      {
        handler(this, new PropertyChangedEventArgs(propertyName));
      }
    }
  }
}