【发布时间】:2016-10-05 08:47:57
【问题描述】:
我想这是一个非常基本的问题,但是为什么 WPF 在第二次而不是在第一次单击时不更改属性(例如背景)?我使用 ViewModel 来存储我的 UI 中的值。因此,当用户单击“保存”按钮时,我可以轻松访问它们。
ViewModel 包含几个属性,这里只是摘录:
using System;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using Drawing = System.Drawing;
using Media = System.Windows.Media;
using BarcodeLib;
namespace BarcodeEncoder
{
class BarcodeViewModel : INotifyPropertyChanged
{
// Some more properties
private Media.Brush foreColor;
public Media.Brush ForeColor
{
get { return this.foreColor; }
set
{
if (this.foreColor != value)
this.OnPropertyChanged("ForeColor");
this.foreColor = value;
}
}
private Media.Brush backColor;
public Media.Brush BackColor
{
get { return this.backColor; }
set
{
if (this.backColor != value)
this.OnPropertyChanged("BackColor");
this.backColor = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public BarcodeViewModel()
{
// Initialisation of the other properties
this.ForeColor = new Media.SolidColorBrush(Media.Colors.Black);
this.BackColor = new Media.SolidColorBrush(Media.Colors.White);
}
}
}
这里是相关的 XAML 标记:
<StackPanel
x:Name="rootElement"
Orientation="Horizontal"
Height="Auto" Width="Auto">
<StackPanel.DataContext>
<local:BarcodeViewModel />
</StackPanel.DataContext>
<!-- Some more UI elements -->
<StackPanel
x:Name="pForeColor"
Background="{Binding ForeColor}"
Width="Auto" Height="23"
Margin="5,0,5,0"
MouseDown="pForeColor_MouseDown"/>
</StackPanel>
最后但并非最不重要的是 MouseDown 事件处理程序:
private void pForeColor_MouseDown(object sender, MouseButtonEventArgs e)
{
using (var cd = new Forms.ColorDialog())
{
if (cd.ShowDialog() == Forms.DialogResult.OK)
this.bcvm.ForeColor = new Media.SolidColorBrush()
{
Color = Media.Color.FromArgb(cd.Color.A, cd.Color.R, cd.Color.G, cd.Color.B)
};
}
}
因此,如果我尝试设置 StackPanel pForeColor 的颜色,ColorDialog 会打开,但单击“确定”时面板不会改变颜色。只有当再次执行此操作并提交选择时,才会出现之前选择的颜色。
那么有人可以告诉我这里出了什么问题吗?
【问题讨论】:
-
请不要在标题中强行添加标签。标签部分确保它们将被正确索引并被其他用户识别
标签: c# wpf mvvm properties