【问题标题】:Why is my control not accessible in codebehind?为什么我的控件无法在代码隐藏中访问?
【发布时间】:2013-03-14 01:24:12
【问题描述】:

当我在 VS 2010 中创建 WPF 应用程序并在 Grid 中放置一个按钮时,我可以从 C# 代码访问控件。我的按钮类实例变量与 XAML“名称”字段中的名称相同。 但是当我使用 VS 2012 RC 创建 WPF 项目时,我看不到控件的实例。 可能是什么问题? VS 2010 和 2012 之间是否有任何默认项目设置差异?

【问题讨论】:

  • 那么我怎样才能访问该实例变量。例如:我想将按钮 IsEnabled 属性设置为 false。
  • 是的,超级老,但我有随机控件的这个问题,直到我关闭并重新打开解决方案,然后智能感知找到它。

标签: c# wpf visual-studio-2012


【解决方案1】:

如果您谈论的是代码隐藏,那么您应该能够访问按钮而无需只需使用它的x:name 属性再次声明它。现在,如果您在谈论 MVVM,那么您应该在使用按钮之前设置您的数据上下文。

当我使用 2012 (Release Candidate) 时,当我尝试访问在 xaml 中声明的元素时,我没有得到代码隐藏 cs 文件的智能感知(我必须在没有它的情况下编写代码),它甚至暗示没有任何元素名称但项目编译和工作。所以我建议你尝试在没有智能感知的情况下编写代码并编译它。

YourButton.IsEnabled = false;

我想这是在 VS 2012 中默认鼓励使用 MVVM 的,但这只是想法。

【讨论】:

  • 我在谈论代码隐藏,问题是我无法使用 x:name 访问它。我什至看到没有创建任何实例。在 VS 2010 中它工作得很好,但在 2012 年就不行了。
  • 奇怪......我在其他机器上试过了,它可以工作......可能我的其他电脑设置有问题
【解决方案2】:

您需要确保您没有以静态方法访问控件。

【讨论】:

    【解决方案3】:

    我有同样的问题的另一种经历。

    当我尝试从后面的代码中访问元素时,没有智能感知显示它,我无法使用它的方法。因此,我尝试调试该项目,发现存在一个合乎逻辑的问题,并且不是语法错误,因此它没有显示在 XAML 代码或任何地方。我修复了它,然后我能够从后面的代码中访问它。确保您尝试访问的元素已正确定义并且具有逻辑正确的属性。

    <ComboBox x:Name="_days" Selected="0"  Width="50"/> 
    

    这是代码,Selected 属性在逻辑上不正确,因为组合框中没有元素,您无法选择第 0 个元素。

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2012-12-20
      相关资源
      最近更新 更多