Wpf 前景属性颜色
XAML: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
这是一个使用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));
}
}
}
}