如何在C#中使用FontWeights之间的Equal Operator?

时间:2013-08-12 13:19:28

标签: c# fonts custom-controls

我必须在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'

感谢。

2 个答案:

答案 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))
        {....}