我必须在CustomControl中创建一个FontWeight属性,但它在控制FontWeights时给出了错误。我该如何解决?
物业注册:
public static readonly DependencyProperty FontWeightProperty =
DependencyProperty.Register(
"FontWeight",
typeof(int),
typeof(WatermarkTextBox),
new PropertyMetadata(0));
属性(我们可以更改此属性,这是我的业余工作):
private int _watermarkFontWeight = 0;
public int WatermarkFontWeight
{
get
{
if (watermarkPassTextBox.FontWeight == FontWeights.Normal)
{
_watermarkFontWeight = 0;
}
else if (watermarkPassTextBox.FontWeight == FontWeights.SemiBold)
{
_watermarkFontWeight = 1;
}
else if (watermarkPassTextBox.FontWeight == FontWeights.Bold)
{
_watermarkFontWeight = 2;
}
else if (watermarkPassTextBox.FontWeight == FontWeights.ExtraBold)
{
_watermarkFontWeight = 3;
}
return _watermarkFontWeight;
}
set
{
if (value == 0)
{
SetProperty<int>(ref _watermarkFontWeight, value, "FontWeight");
watermarkPassTextBox.FontWeight = FontWeights.Normal;
}
else if (value == 1)
{
SetProperty<int>(ref _watermarkFontWeight, value, "FontWeight");
watermarkPassTextBox.FontWeight = FontWeights.SemiBold;
}
else if (value == 2)
{
SetProperty<int>(ref _watermarkFontWeight, value, "FontWeight");
watermarkPassTextBox.FontWeight = FontWeights.Bold;
}
else if (value == 3)
{
SetProperty<int>(ref _watermarkFontWeight, value, "FontWeight");
watermarkPassTextBox.FontWeight = FontWeights.ExtraBold;
}
}
}
错误:
Operator '==' cannot be applied to operands of type 'Windows.UI.Text.FontWeight' and 'Windows.UI.Text.FontWeight'
感谢。
答案 0 :(得分:3)
据我所知documentation page(令人惊讶地缺乏信息和/或我无法找到详细的结果),FontWeight
是一个struct
值类型, 不为==
定义运算符,因此您无法直接比较它们。
但是,我认为您可以比较其基础包裹的Weight
值:
if (watermarkPassTextBox.FontWeight.Weight == FontWeights.Normal.Weight)
编辑:我不确定他们的Equals
实现是否有效(再次,可爱的文档),但您可以创建一个扩展方法,为您提供一些看起来不太合适的语法:
public static bool Equals(this FontWeight weight1, FontWeight weight2)
{
return weight1.Weight == weight2.Weight;
}
导致使用:
if (watermarkPassTextBox.FontWeight.Equals(FontWeights.Normal))
_watermarkFontWeight = 0;
else if (watermarkPassTextBox.FontWeight.Equals(FontWeights.SemiBold))
_watermarkFontWeight = 1;
else if (watermarkPassTextBox.FontWeight.Equals(FontWeights.Bold))
_watermarkFontWeight = 2;
else if (watermarkPassTextBox.FontWeight.Equals(FontWeights.ExtraBold))
_watermarkFontWeight = 3;
else
return _watermarkFontWeight;
答案 1 :(得分:-1)
我不确定,但你可以尝试在转换之后进行比较转换为字符串 .. 即
if (Convert.Tostring(watermarkPassTextBox.FontWeight) == Convert.Tostring(FontWeights.Normal))
{....}