2009-12-03 15 views
4

在Silverlight 3開始的幾個小時裏,作爲一個狂熱的WPF用戶,我對它不支持的許多事情感到非常失望。這對我來說似乎是一個奇怪的問題,而且它非常通用,我無法在網上找到任何關於它的信息。在代碼中看不到命名的Silverlight控件

我有以下XAML:

<controls:TabControl x:Name="workspacesTabControl" Grid.Row="1" 
Background="AntiqueWhite" ItemsSource="{Binding Workspaces, ElementName=_root}"/> 

不過,我看不到代碼隱藏workspacesTabControl。我想,也許智能感知只是小氣,想繼續前進,反正編譯它,但得到了一個錯誤:

Error 1 The name 'workspacesTabControl' does not exist in the current context 

如何訪問代碼隱藏控件?

編輯:我意識到我粘貼了錯誤的錯誤 - 我有UserControl中稱爲workspacesTabControl和menuStrip的兩個控件。在代碼隱藏方面,我無法通過他們的名字找到他們中的任何一個。

以防萬一,這裏是爲menuStrip的XAML:

<controls:TreeView Grid.ColumnSpan="2" Height="100" x:Name="menuStrip" 
        ItemContainerStyle="{StaticResource MenuStripStyle}" 
        ItemsSource="{Binding Menu, ElementName=_root}"/> 

再次編輯:

我不知道這是有益的,但我已經看到了在InitializeComponent()代碼和這裏就是我看到:

[System.Diagnostics.DebuggerNonUserCodeAttribute()] 
public void InitializeComponent() { 
    if (_contentLoaded) { 
     return; 
    } 
    _contentLoaded = true; 
    System.Windows.Application.LoadComponent(this, new System.Uri("/SapphireApplication;component/SapphireMain.xaml", System.UriKind.Relative)); 
} 

看來,它只是加載XAML當它運行(不前或編譯期間),因此menuStripworkspacesTabControl名稱實際上並未在任何地方註冊(因爲它們通常在WPF/win表單中)。這個屬性可能是一個問題嗎?我在哪裏擺脫了我所做的所有未來UserControls的這一要求?

+0

無法重現您的問題。 – AnthonyWJones 2009-12-03 23:07:46

+0

出於好奇,您的UserControl上設置的x:Class是什麼? – JerKimball 2010-03-18 21:12:18

回答

2

荒謬,因爲它可能聲音,我已經使出使用FindName()方法來訪問命名項後臺代碼:

this.FindName("workspacesTabControl") as TabControl 

我知道這是一種荒謬的方式,但我現在被迫使用它。請讓我知道,如果別人遇到了這個問題,並提出了一個更好的解決方案!

0

您應該能夠在代碼隱藏中看到它,該部分與WPF的工作方式相同,也許如果您使用menuStrip修復問題,則Visual Studio將能夠構建頁面的xaml paty,並且可以能夠訪問tabcontrol

0

我在我的Silverlight開發中看到了同樣的問題。特定於我的問題,我的命名控件嵌套在其他控件(即數據網格)內,我無法在我的代碼中訪問它們。在相同的嵌套級別或以上提到的數據網格上的任何命名控件運行良好,但其中的任何內容都丟失在深淵中。

1

當您第一次創建控件時,Visual Studio不會使用IntelliSense檢測到它。但是,在嘗試構建項目之後,它應該可用。您也可以在沒有智能感知的情況下鍵入名稱,然後構建它。沒有證實這一點,但我聽說這是在SL4中修復的事情清單。這就是說,如果你在一個數據模板內命名一個控件,那麼這個控件不能直接在代碼隱藏中訪問。不過,WPF也是如此。

+0

我知道它的老,但這個答案的第二段幫助了我 - 我不知道這個事實,並將不得不以另一種方式控制。 – Lindsay 2017-08-24 23:15:36

0

正如已經提到的,它應該只出現在Intellisense中,然而事實是,您得到的是與其他內容有關的錯誤,即「menuStrip」可能會干擾Intellisense。解決這個錯誤,你可能會發現你可以訪問「workspacesTabControl」控件。

你可能使用了一些示例代碼,或者他們已經命名了一個控件「menuStrip」並且你已經重命名了它?

祝你好運

0

檢查您是否沒有使用與名稱空間名稱相同的類名的任何控件。例如:

namespace Solution.ProjectName.workspacesTabControl 
{ 
    public class workspacesTabControl 
    { 
     ... 
    } 
} 

這也會給你這個錯誤。

祝你好運,
馬克

+0

事實並非如此。我的定義是這樣的:namespace SapphireApplication {public partial class SapphireMain:UserControl { – Alexandra 2009-12-04 13:33:54

22

檢查VS中xaml文件本身的屬性...確保Build Action設置爲Page。

+3

我有這個問題,這對我有用。我必須將Build Action設置爲Page,然後更改XAML中的某些內容以使VS重新編譯頁面。 – 2010-04-30 17:07:44

+0

這是我的問題,它工作。此外,道具布蘭登建議XAML需要重新編譯。 – thepaulpage 2010-09-07 13:26:12

+2

當我將xaml + .cs文件從一個項目複製到另一個項目時,構建操作被設置爲ApplicationDefinition而不是Page。改回它,註釋掉所有的代碼隱藏,在所有的代碼隱藏中構建和評論,爲我解決了這個問題。 – 2011-06-28 03:01:00

相關問題