2014-02-27 31 views
1

我經常發現,雖然我是'原型',並且我改變了類之後的代碼的基類型,或者類似的東西,這兩個文件完全不瞭解對方。例如:如何重新連接XAML視圖文件及其代碼隱藏文件?

XAML:

<UserControl x:Class="G4S.XTime.Modules.Employees.Details.Views.EmployeeGridView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      ... 

代碼隱藏:

namespace G4S.XTime.Modules.Employees.Details.Views 
{ 
    public sealed partial class EmployeeGridView: UserControl 
    { 
    public EmployeeGridView() 
    { 
     //InitializeComponent(); 
    } 
    } 
} 

呼叫InitializeComponent產生一個編譯時錯誤,稱它不存在。

這種斷開連接現象經常會花費我的時間,我經常只是複製這兩個文件中的代碼,刪除視圖,添加一個具有相同名稱的新視圖,粘貼相同的代碼,並且一切正常。

我缺少什麼連接這兩個文件?在項目文件中,我發現代碼隱藏取決於XAML,所以我認爲如果我註釋掉InitializeComponent,然後僅使用XAML進行編譯,那麼我的代碼的另一部分將落在部分類中。但這不起作用。它似乎並沒有編譯XAML,除非存在代碼。

在大多數情況下,我能做些什麼來重新連接這兩個文件?

+1

清潔並重新生成解決方案 – Gusdor

回答

2

編輯您的項目文件,並確保你有一些與此類似:

<Compile Include="EmployeeGridView.xaml.cs"> 
    <DependentUpon>EmployeeGridView.xaml</DependentUpon> 
    <SubType>Code</SubType> 
</Compile> 
0

我有同樣的問題,我的XAML的複製粘貼後(的InitializeComponent無法找到)。 answer suggested here解決了我的問題。建議是在XAML的屬性窗口中,將構建動作更改爲頁面。顯然,複製粘貼可以將構建操作更改爲資源

希望這會有所幫助!

[編輯]我想補充一點,這也是更新命名空間後,這兩個代碼隱藏,並在XAML:

x:Class="NewNamespace.CodeBehindClass"  
1

對我來說,問題是由不具有正確的方式造成將文件包含在csproj文件中。

不正確:

<CodeAnalysisDictionary Include="Windows\ConnectionSecuritySettings.xaml"> 

正確:

<Page Include="Windows\ConnectionSecuritySettings.xaml"> 

這件事發生時,我感動的資料轉移到新的項目

+0

這發生在我身上,以及之後ReSharper的'Move'重構。 –

0

在XAML的頂部確保申報代碼相匹配包含命名空間的完整路徑後面的文件。

例如。如果命名空間名稱是「MyControls」,並且類後面的代碼是「MyNewControl」,那麼 xaml聲明應該是類似於..

<UserControl x:Class="MyControls.MyNewControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

      mc:Ignorable="d" 

      Height="41" Width="77" 
      > 

和代碼背後是..

namespace MyControls 
{ 
    /// <summary> 
    /// Interaction logic for MyNewControl.xaml 
    /// </summary> 
    public partial class MyNewControl: UserControl 
    { 
     #region Constructors 
     public MyNewControl() 
     { 
      InitializeComponent(); 
     } 
     #endregion 
    } 
}