2009-06-05 33 views
42

Điều này rất lạ.Tại sao Visual Studio không thể tìm thấy phương pháp WPF InitializeComponent của tôi?

Tôi có một file XAML trông như sau ...

<Window 
    x:Name="window" 
    x:Class="ix.Production.Title" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Title" Height="768" Width="1024" 
    Loaded="window_Loaded"> 

    <Window.Resources> 
    etc... 

Và mã bên cạnh tôi trông như sau ...

using System; 
using System.Windows; 
using System.Windows.Media.Animation; 
using System.Threading; 

namespace ix.Production 
{ 
    public partial class Title : Window 
    { 
     public Title() 
     { 
      InitializeComponent(); 
     } 
    .... 

Mã này từ chối để biên dịch vì Visual Studio nhấn mạnh rằng InitializeComponent "không tồn tại trong ngữ cảnh hiện tại."

Làm cách nào để khắc phục sự cố này?

+0

Lỗi đánh máy, ngớ ngẩn từ phía tôi (tôi có hai dự án tương tự). Không gian tên lớp thực sự đúng, nhưng tôi vẫn gặp lỗi tương tự. – willem

Trả lời

0

Hình như đây là một xoắn trong Visual Studio 2008.

Nếu tôi có thể tạo một tập tin mới (tức là Title2), sao chép/dán mã và XAML, sau đó thay đổi tất cả 'Title' thành 'Title2', mọi thứ hoạt động tốt trở lại.

0

Lớp học của bạn là một phần, vì vậy bạn nên có một tệp khác có chứa một số phần khác của lớp Tiêu đề của bạn (ví dụ phương pháp InitializeComponent). Cố gắng tìm tệp đó và xem không gian tên trong tệp đó, bằng không gian tên của tệp chứa các phần khác trong lớp của bạn.

+0

Nó nói một phần ... nhưng tôi tự hỏi nếu InitializeComponent thực tế không được tạo ra ở đâu đó bởi WPF? Tôi không chắc. Đã không thể tìm thấy nó. – willem

30

XAML bạn nói:

x:Class="ix.Production.Title" 

trong khi lớp học thực tế là ix.Outage.Title. Hoặc là thay đổi khai báo XAML hoặc di chuyển lớp tới không gian tên ix.Production.

+0

Điều này! Visual Studio không thích sao chép-dán và không gian tên ... –

+0

Cảm ơn, sao chép dán đi sai một lần nữa :) – Yablargo

5

không gian tên của bạn không phù hợp:

x:Class="ix.Production.Title" 
namespace ix.Outage { ... 
0

Tôi đã gặp rắc rối với cùng một vấn đề ở đây. Những gì tôi đã làm là để xóa tất cả các tập tin được tạo ra unde thư mục gỡ lỗi, sau đó xây dựng lại các giải pháp.

Kính trọng, Petrus

0

tôi đã đi qua cùng một vấn đề khi tôi đã nhận một mẫu dự án từ MSDN. vấn đề là nó là một dự án 4.0 và tôi đã không có 4.0 trong hệ thống của tôi, vài dlls tham chiếu đã bị mất (system.xaml và một số khác) loại bỏ chúng. cố gắng biên dịch, sẽ luôn ném phương thức initializecomponent không tìm thấy. đi vào các thuộc tính của dự án đã thay đổi khung mục tiêu thành 3.5 và nó không còn phàn nàn nữa.

1

tôi đã cùng một vấn đề với một dự án 2.010 mẫu trực quan   Studio   mà tôi tự quay trở Visual Studio     2008. Tôi tìm thấy tôi đã quên để thiết lập khung Target của dự án để .NET Framework 3.5. Nó trống rỗng trong dự án được hoàn nguyên về Visual   Studio   2008, ban đầu được đặt thành 4.0 trong dự án Visual   Original   2010 ban đầu.

Để đặt Khung mục tiêu của dự án, hãy chuyển đến thuộc tính dự án, truy cập tab đầu tiên có tên Ứng dụng và chọn Khuôn khổ .NET 3.5 trong trình đơn thả xuống Khung mục tiêu.

Tất nhiên, tôi thích Visual Studio cho tôi một lỗi hoặc ít nhất là một cảnh báo rằng tôi đã không đặt Khung mục tiêu của tôi, nhưng hey, đó là một phần của phát triển trong Visual Studio, tôi đoán.

Visual Studio 2008 WPF project properties

44

Một trường hợp tôi đã thấy điều này xảy ra trong khi bạn sao chép dán một kiểm soát XAML/cửa sổ, vv Các phương thức InitializeComponent tồn tại trong một tập tin .g.cs tương ứng được tạo tự động. Trong trường hợp của tôi, sau khi dán bản sao, Xây dựng Hành động cho XAML (trong cửa sổ Thuộc tính) đã được đổi thành "Tài nguyên". Tôi đổi thành "Trang" và bắt đầu hoạt động tốt.

Tôi hy vọng điều này sẽ hữu ích.

Chuỗi đã giúp tôi với điều này là The name 'InitializeComponent' does not exist....

+2

Tôi có vấn đề này rất nhiều khi sao chép và dán, tuyệt vời để biết để kiểm tra này. – cab

+0

Yap, chỉ gặp vấn đề này khi sao chép các tệp XAML giữa các dự án –

+3

+1 Mỏ đã được thay đổi thành 'CodeAnalysisDictionary' sau thao tác Cắt & Dán ... đẹp nhất Microsoft! Tất cả cố định sau khi đặt nó trở lại 'Trang'. Rất cám ơn gp. – Sheridan

13

Vì vậy, đơn giản, nhưng rất dễ bị bỏ qua: MainWindow 's x:Class được thiết lập để 'MainWindow', khi nó cần phải có được thiết lập để namespace.MainWindow (x:Class="namespace.MainWindow"). Nếu điều này không được thực hiện, thì tệp MainWindow.g.xaml sẽ không bao gồm khối không gian tên và lệnh gọi tới InitializeComponent() trong hàm tạo của MainWindow sẽ không hoạt động.

Mặc dù điều này rõ ràng không phải là một giải pháp cho vấn đề của willem, tôi đã đăng nó ở đây vì có quá nhiều giải pháp khác được liệt kê. Hy vọng rằng điều này sẽ giúp người khác tình cờ gặp phải bài đăng này khi cố khắc phục sự cố của họ.

2

Tôi thường gặp sự cố này khi đổi tên các lớp điều khiển tùy chỉnh hoặc trong trường hợp của bạn, thay đổi tên của không gian tên của lớp. Nếu bạn không sử dụng tái cấu trúc Visual Studio, thì bạn phải tự thay đổi tên trong cả hai tệp XAML và C#.

Tái cấu trúc chỉ tốt khi bạn đổi tên lớp, để đổi tên không gian tên, bạn phải thực hiện thủ công.

Đối với InitializeComponent, hãy xem [Project Folder]\obj\Debug\<class_name.g.cs>.

+1

Hoặc chỉ cần xóa toàn bộ tập tin \ obj và để Visual Studio xây dựng lại nó – JordanBean

+0

Hoặc điều đó, tôi đã đi cho một câu trả lời hoàn chỉnh :) –

0

FWIW, tôi nhấn cùng một vấn đề ngày nay sau khi di cư của một Visual Studio     2008 giải pháp cho Visual Studio     2010. Dường như sự di cư goofed và các dự án của họ bị mất Target Framework (trong Project Properties): Bối cảnh là bây giờ trống rỗng !?

Đặt .NET Framework 3.5 giải quyết được sự cố.

1

Tôi không thể tìm thấy InitializeComponent và các bit UI liên quan đến XAML khác từ mã sau thời điểm tôi thêm PCL (chứa các lớp dữ liệu của tôi) vào giải pháp.

: |

Nhưng nếu tôi tháo PCL ra, nó có thể được tìm thấy lần nữa.

Bất kể, dù nó có được tìm thấy hay không - tôi vẫn có thể biên dịch. Tôi chỉ không thể tự động hoàn thành khi tôi nhập mã.

Có thể bạn có dự án PCL trong giải pháp của mình? (Tôi không biết làm thế nào để sửa lỗi này chưa)

0

này xảy ra với tôi vì Visual Studio đặt "Xây dựng hành động" đối với một số ngẫu nhiên hành động khi bạn sao chép/dán hoặc di chuyển một file XAML từ một dự án khác trong một giải pháp.

Giải pháp: Đảm bảo "Hành động xây dựng" được đặt thành trang cho bạn XAML.

Tôi hy vọng điều này sẽ giúp ích nếu trường hợp tương tự đối với bạn.

Các vấn đề liên quan