Silverlight:从代码访问XAML控件

时间:2011-01-24 15:55:37

标签: silverlight user-controls compiler-errors

我在访问页面的XAML上定义的Panel控件时遇到问题,XAML以这种方式定义:

<UserControl
    x:Class="PhoneBook.SilverlightMainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    mc:Ignorable="d" Width="400" Height="300" d:DesignWidth="993" d:DesignHeight="887">

    <Grid x:Name="LayoutRoot" />
</UserControl>

该类的定义如下:

public partial class SilverlightMainPage : UserControl
{
    public SilverlightMainPage()
    {
        InitializeComponent();
    }        
}

我正试图以这种方式实例化它:

var silverlightMainPage = new PhoneBook.SilverlightMainPage();
SomeMethod((silverlightMainPage.LayoutRoot);

我觉得很奇怪的是,当我把点放在对象实例之后时,它实际上将LayoutRoot列为其中一个成员,但是当我尝试编译应用程序时,它说没有具有该名称的成员。

关于什么可能是hapenning的任何想法?

由于

编辑:我也尝试在SilverlightMainPage类上创建一个返回LayoutRoot元素的属性,但它也说该类不包含Layout root的定义。

2 个答案:

答案 0 :(得分:0)

您是否有可能尝试从其他程序集访问SilverlightMainPage.LayoutRoot?在MainPage.g.i.cs文件中,LayoutRoot(以及XAML中定义的所有其他控件)标记为“internal”,即:

    internal System.Windows.Controls.Grid LayoutRoot;

您可能想尝试创建一个公共而不是内部属性来执行FindName(“LayoutRoot”)并返回适当的控件。

答案 1 :(得分:0)

其实我发现了问题。

我使用公司其他人建立的工具自动生成项目。

我做了一些额外的测试,并为项目添加了一个新的UserControl,并尝试从后面的代码中的属性访问LayoutRoot,并且它有效。

然后将完全相同的代码复制到带有问题的文件中(只是更改类名)并且它没有编译。

然后我检查了项目文件,找到了这样一个部分:

<ItemGroup>
    <Compile Include="SilverlightMainPage.xaml.cs">
        <DependentUpon>SilverlightMainPage.xaml</DependentUpon>
    </Compile>
</ItemGroup>

由于某种原因导致编译失败。 我删除了那部分,现在一切正常。

感谢您的回答。