3

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

谢谢。

4

2 回答 2

4

从我可以从文档页面中得知(令人惊讶地缺乏信息和/或我无法找到详细的 decoumentation),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;
于 2013-08-12T14:13:24.613 回答
-1

我不确定,但您可以尝试在将 其转换为字符串之后进行比较.. 即

if (Convert.Tostring(watermarkPassTextBox.FontWeight) == Convert.Tostring(FontWeights.Normal))
        {....}
于 2013-08-12T13:31:11.943 回答