2011-01-24 32 views
0

我在訪問一個頁面的XAML定義的面板控制問題訪問XAML控件,XAML的定義是這樣的:Silverlight的:從代碼

<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); 

我感到奇怪的是,當我把點AFTE對象實例,它實際上列出了作爲其中一個成員的LayoutRoot,但是當我嘗試編譯該應用程序時,它說沒有該名稱的成員。

任何想法可以發生什麼?

感謝

編輯:我也嘗試創建對返回的LayoutRoot元素SilverlightMainPage類的屬性,但它也說,類不包含佈局根的定義。

+0

嘗試右鍵單擊InitializeComponent()方法,然後選擇「轉到定義」。你看到LayoutRoot嗎? –

+0

該面板無法訪問到哪裏?你在哪裏設置主頁面?從App.xaml?你能提供SomeMethod()的代碼嗎? – danbord

回答

0

其實我發現了這個問題。

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

我做了一些額外的測試,並向項目中添加了一個新的UserControl,並嘗試從代碼後面的屬性訪問LayoutRoot,並且它工作正常。

然後將完全相同的代碼複製到帶有問題的文件(只是更改類名稱),並且它沒有編譯。

然後我檢查了項目文件,發現這樣一段:

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

由於某種原因是造成編譯失敗。 我刪除了該部分,現在一切正常。

儘管感謝您的答案。

0

是否有機會嘗試從其他程序集訪問SilverlightMainPage.LayoutRoot?在MainPage.gics文件,LayoutRoot(在XAML中定義的所有其他控件)標記爲「內部」,即:

internal System.Windows.Controls.Grid LayoutRoot; 

你可能想嘗試建立一個公開,而不是做一個FindName的內部屬性(「LayoutRoot」)並返回適當的控件。