2009-06-02 40 views
5

Tôi muốn có lớp ứng dụng của riêng tôi kế thừa từ System.Windows.Application. Vấn đề là trong file Application.xaml, tôi phải khai báo các ứng dụng như thế này:WPF - kế thừa từ System.Windows.Application

<src:MyBaseApplication x:Class="MyApplication" 
    xmlns:src="clr-namespace:MyApplication;assembly=WpfTestApplication" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="FPrincipal.xaml">  
    <Application.Resources> 

    </Application.Resources> 
</src:MyBaseApplication> 

Nó hoạt động tuyệt vời trong thời gian chạy, nhưng khi tôi chỉnh sửa các thuộc dự án, tôi nhận được thông báo lỗi sau của dự án trình chỉnh sửa thuộc tính của Visual Studio:

Đã xảy ra lỗi khi cố gắng tải tệp định nghĩa ứng dụng cho dự án này. Không thể phân tích cú pháp tệp '[...] \ Application.xaml'. Vui lòng chỉnh sửa tệp trong trình chỉnh sửa XAML để sửa lỗi. Không thể tìm thấy phần tử gốc được mong đợi "Ứng dụng" trong tệp định nghĩa ứng dụng.

Dự án là dự án VB.NET. Ai đó có cách giải quyết? Tôi muốn giữ file application.xaml.

Cảm ơn

+0

Bạn đã bao giờ tìm ra giải pháp cho vấn đề này chưa? –

+0

Tôi chỉ thử nó và không có lỗi, tôi đã có thể lấy được từ System.Windows.Application, và sau đó sử dụng nó trong App.Xaml của tôi, tất cả mọi thứ hoạt động như nó nên, không có xem phàn nàn về bất cứ điều gì. – adminSoftDK

+0

@adminSoftDK: bạn đã thử với VS2008 chưa? –

Trả lời

-1

nó có nên nói < src: MyBaseApplication.Resources>?

+0

Vâng, bạn có thể, nhưng kể từ khi bạn đang kế thừa từ ứng dụng, bạn cũng có thể sử dụng Application.Resources ... – Arcturus

-1

Ứng dụng thường trỏ tới Cửa sổ và cố gắng lấy thông tin này từ tệp xaml; nhưng bạn có một tài liệu tham khảo trong file XAML của bạn mà Visual Studio không thể xác định ..

xmlns:src="clr-namespace:MyApplication;assembly=WpfTestApplication" 

Vì vậy, VS không thể phân tích tập tin XAML của bạn, và do đó mang lại cho lỗi mà ...

Đề nghị của tôi: ghi đè lên các cửa sổ, hoặc sử dụng phần mở rộng trên ứng dụng, như vậy:

public static class ApplicationExtensions 
{ 
    public static string GetAwesomeName(this Application) 
    { 
     return "I am an awesome application"; 
    } 
} 

sử dụng nó như thế này:

Application.Current.GetAwesomeName(); 
+0

Bạn bỏ lỡ một cái gì đó. Thông báo lỗi chỉ định rằng thẻ Ứng dụng bị thiếu. Đó là sự thật bởi vì thẻ gốc là src: MyBaseApplication. VisualStudio nên đủ khôn ngoan để tìm thẻ gốc với một tên khác. Tôi đã biết rằng tôi có thể phân lớp ứng dụng trong C#, nhưng làm điều này, chúng tôi sẽ mất tệp .xaml được liên kết với ứng dụng. –

+0

Bạn đã cân nhắc việc cắt xén các phần xaml thành một ResourceDictionary và bao gồm trong Tài nguyên của ứng dụng của bạn? – Arcturus

2

Tôi đã thử nó với Visual Studio 2013 nhưng tôi không gặp bất kỳ vấn đề gì. Vì vậy, nó nên được VS 2008 cụ thể. Bạn đã cố gắng tổ chức lại lớp ứng dụng của mình thành một thư viện lớp riêng biệt? Có lẽ nó là một vấn đề khóa.

CẬP NHẬT

Các bước tôi đã làm trong VB.NET VS2013 để làm cho nó xảy ra:

  1. Tạo lớp ứng dụng tùy chỉnh. Tôi tạo ra nó trong cùng một hội đồng. Tên lắp ráp của tôi là: WPFVBTest
Public Class CustomApplication 
    Inherits System.Windows.Application 

End Class 
  1. Sửa đổi Application.xaml. Thêm tham chiếu vùng tên và thay đổi vùng chứa gốc thành lớp ứng dụng tùy chỉnh.
<self:CustomApplication x:Class="Application" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:self="clr-namespace:WPFVBTest" 
     StartupUri="MainWindow.xaml"> 
    </self:CustomApplication> 
  1. Sửa đổi mã đằng sau file: Application.xaml.vb để kế thừa từ lớp CustomApplication
Class Application 
    Inherits CustomApplication 

End Class 
  1. Xây dựng ứng dụng. Một lỗi sẽ xảy ra chỉ ra rằng MyWpfExtension.vb không đồng bộ với tên lớp ứng dụng. Đây là một lớp được tạo ra, nhưng không được tạo lại ở mọi bản dựng. Tôi biết gian lận của nó, nhưng đây là cách duy nhất tôi có thể quản lý nó. Vì vậy, tôi sửa đổi nó bằng tay:
Partial Class Application 
    Inherits CustomApplication 

Bằng cách này, ứng dụng được xây dựng và chạy mà không có một vấn đề. Tôi hy vọng nó sẽ giúp bạn giải quyết lỗi của bạn.

+0

Tôi vẫn gặp sự cố trong VS 2015. Đối với kịch bản của tôi (tôi đặt tiền thưởng), lớp 'MyBaseApplication' tồn tại trong thư viện lớp. Những gì bạn có nghĩa là do một vấn đề khóa? –

+0

Những gì tôi có thể nghĩ, rằng VS không thể tải lớp ứng dụng tùy chỉnh vì nó đang được sử dụng. Có lẽ VS chính nó đang sử dụng nó, hoặc một số ứng dụng khác. Nó có xảy ra khi bạn nhấp chuột phải vào dự án và thử mở Properties? Bạn có sử dụng bất kỳ công cụ nào khác trong VS có thể sử dụng assembly không? Reflector.NET hoặc một số công cụ của bên thứ 3 khác? –

+0

Chỉ để xác nhận - bạn đang làm điều này với VB.NET? –

2

Tôi biết nó sẽ không phải là một câu trả lời phổ biến, nhưng ... tại sao bạn không chỉ nâng cấp lên Visual Studio 2015? Nó miễn phí!

Địa ngục, họ đã công bố VS 2017 ngay hôm qua; cũng miễn phí.

+0

Tôi đang sử dụng VS 2015 và nó vẫn không hoạt động. Bạn đang sử dụng C# hoặc VB.NET? –

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