2013-05-19 26 views
6

Tôi đã đọc một vài chủ đề về điều này, nhưng tôi vẫn không biết cách giải quyết nó trong trường hợp của mình. Tôi đến từ Java và chủ yếu mới đến C#Không thể chuyển đổi hoàn toàn loại 'System.EventHandler' thành 'System.EventHandler <object>' cho bảng phân cảnh hoàn chỉnh

Tôi muốn đính kèm nghe khi hình ảnh động kết thúc:

myStoryBoard.Completed += new EventHandler(onMyStoryBoardCompleted); 

Và:

private void onMyStoryBoardCompleted(object sender, EventArgs e) 
{  
} 

Và tôi nhận được lỗi trong tiêu đề. Tôi cố gắng:

myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted); 

Nhưng sau đó tôi nhận được:

no overload for 'onMyStoryBoardCompleted' matches delegate 'System.EventHandler<object>' 

Vì vậy, có vẻ như rằng chữ ký là không tương thích với EventHandler <object> và tôi không thể tìm thấy làm thế nào để làm cho nó tương thích, tôi cũng don' t biết nếu phương pháp này là chính xác.

tôi đọc

Understanding events and event handlers in C#

C# Dynamic template implicit conversion error from System.EventHandler to System.EventHandler<TEventArgs>

defining event handler for Tick event of DispatcherTimer in windows 8 app

Nhưng vẫn không tìm ra giải pháp cho trường hợp này.

Xin cảm ơn trước.

+0

'myStoryBoard.Completed + = new EventHandler (onMyStoryBoardCompleted);' nên hoạt động – SLaks

+0

Bạn đang sử dụng lớp StoryBoard nào? Nếu đó là 'Dòng thời gian' có nguồn gốc,' Hoàn thành' sẽ được định nghĩa là kiểu EventHandler, điều này có nghĩa là nó sẽ biên dịch mà không có lỗi. –

+0

Tôi đang tham khảo một bảng phân cảnh từ XAML trong UserControl.Resource tag – Ixx

Trả lời

8

Hãy thử:

private void onMyStoryBoardCompleted(object sender, object e) 
{ } 

Và đăng ký sử dụng generic EventHandler<object>:

myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted); 

Tất nhiên, điều này đi ngược lại các quy ước .NET Framework rằng đối số thứ hai để xử lý sự kiện phải là một ví dụ của EventArgs (hoặc một lớp có nguồn gốc từ đó). Tôi giả định rằng bạn đang chạy trên một khung công tác khác, chẳng hạn như Windows 8 Metro, có lớp Timeline xác định sự kiện Completed có chữ ký EventHandler<object>.

+0

Không, vẫn gặp lỗi tương tự – Ixx

+0

Bạn đã thử sử dụng chung 'EventHandler '? Bạn đã gặp lỗi gì? – Douglas

+0

Ah, sự kết hợp đó thực sự hiệu quả! Thật lạ khi chữ ký phương thức được tạo bởi Visual Studio. Và vâng, tôi đang phát triển cho Metro. – Ixx

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