【问题标题】:WPF: Integer CLR property not recognized or is not accessible from XAMLWPF:整数 CLR 属性无法识别或无法从 XAML 访问
【发布时间】:2013-09-16 13:46:34
【问题描述】:

我在 WPF 中有一个自定义控件。我添加了两个普通的 CLR 属性,如下所示:

private int _ChordFrom = 0;
public int ChordFrom
{
    get { return _ChordFrom; }
    set { _ChordFrom = value; }
}

private int _ChordTo = 0;
public int ChordTo
{
    get { return _ChordTo; }
    set { _ChordTo = value; }
}

我使用普通的 CLR 属性,因为我不想将这些属性绑定到任何其他依赖项。我只想在实例化控件时在 XAML 中设置值。

在 XAML 中,智能感知可以找到属性,但是在构建项目时出现错误:

“成员“ChordFrom”无法识别或无法访问。” “成员“ChordTo”无法识别或无法访问。”

XAML 代码如下所示:

<TabItem Header="CHORDS I">
    <Grid x:Name="_gridChords_1" Background="AliceBlue">
        <mg:MidiChordGrid x:Name="gridMidiChordGrid_1" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  ChordFrom="0" ChordTo="7"/>
    </Grid>
</TabItem>

我想知道三件事:

  • 为什么 Intellisense 会向我提供 XAML 中的属性,如果 他们无法访问?

  • 如果我关闭所有 XAML 窗口,重新构建项目,错误 消失。

  • 即使可以构建项目没有任何错误,属性是 未设置。

回答 |回答 |回答 |回答 |回答 |回答 |回答

感谢所有答案,但解决方案/错误在我的代码中。设置这两个 CLR 属性后,我忘了更新我的网格。对此感到抱歉。

但这里有一些您可能想知道的事实:

  • 您可以在 WPF XAML 中使用和设置普通 CLR 属性。我检查了一下,属性是从 XAML 设置的
  • “无法识别或无法访问”错误似乎是 VS 错误,因为项目是可构建的
  • 如果您关闭 VS 中的 XAML 文件,则不会再出现构建错误

对我来说,此时使用纯 CLR 属性是最好的解决方案,因为我传递给控件的值对于控件的每个实例都是硬编码的,并且它们在运行时不会更改。当然,如果值在运行时发生了变化,我当然想使用附加的 DP,但它们不会。

感谢您的快速回答,但最终是我的错。

【问题讨论】:

  • 谢谢皮奥特。我已经用依赖属性对此进行了测试,我得到了同样的错误。我从昨天开始就在做这个。我尝试了普通的 DP、附加的 DP 和现在的普通 CLR 属性。
  • 实际上,如果您不使用这样的绑定,您可以在 xaml 中使用普通属性,所以这不是问题
  • 如果我关闭所有 XAML 窗口,重新构建项目,错误就会消失。 => 这意味着它实际上是设计错误而不是构建错误,如果您尝试运行它会发生什么?
  • 如果我运行它,属性没有设置。
  • 你能否给出 MidiChordGrid 类的定义?

标签: c# wpf xaml clr dependency-properties


【解决方案1】:

我只是确认这似乎是问题中提到的视觉工作室错误。 我向控件添加了几个属性,并花了一个小时试图弄清楚为什么它不会构建。阅读完上面的帖子后,我简单地关闭了 xaml 文件,单击构建并成功构建。 使用 VS 2013 community sp 4.

【讨论】:

  • 你刚刚节省了我的一个小时。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多