2009-08-11 41 views
16

Tôi bán ứng dụng WPF, trên một máy khách hàng (trong số hàng trăm) toàn bộ cửa sổ ứng dụng là màu đen, bất kỳ ai biết điều gì đang xảy ra?cửa sổ wpf hoàn toàn đen

Máy đang chạy Windows XP với .net 3.5SP1, bộ điều hợp đồ họa là GeForce 6200 với hai màn hình (vô hiệu hóa một màn hình không giải quyết được sự cố).

Đặt "Cài đặt tương thích" thành "256 màu" giải quyết được sự cố (nhưng đó không phải là giải pháp khả thi, tôi cần nhiều màu hơn để ứng dụng trông đẹp).

Ứng dụng này là yaTimer (http://www.nbdtech.com/yaTimer/), nó có chrome tùy chỉnh cửa sổ dựa trên các kỹ thuật được mô tả trong bài đăng này http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx trong phần "Office 2007 không có Aero".

Nếu có ai có thể cho tôi một đầu mối về những gì đang xảy ra, tôi sẽ rất biết ơn.

Cảm ơn.

+0

Tôi cũng gặp vấn đề tương tự, bằng cách sử dụng cùng một kỹ thuật. – VHanded

+0

bạn đã giải quyết vấn đề này chưa? –

+0

@Luis Filipe - Không, tôi đã không giải quyết vấn đề này, khách hàng đã gặp vấn đề này đã quyết định chuyển sang một sản phẩm khác (không đáng ngạc nhiên) và tôi không nhận được khiếu nại về vấn đề này từ bất kỳ ai khác. – Nir

Trả lời

0

Âm thanh tương tự như vấn đề tôi đã có đêm khác và được đăng ở đây:

Question: WPF - No Content Rendered

Kiểm tra các trình điều khiển card màn hình như một khả năng

+0

Cảm ơn, nhưng các trình điều khiển đã là phiên bản mới nhất. – Nir

+0

Tôi gặp sự cố này trên kết nối máy tính từ xa. Từ máy tính của tôi hoạt động tốt; Từ một máy tính khác, nó hiển thị một cửa sổ màu đen –

+0

Tôi đã gặp vấn đề này với trình điều khiển ATI trên điện thoại di động. – decompiled

1

tôi đã có vấn đề với ghi đè các mẫu cửa sổ. Tôi đã tìm ra rằng nếu bạn nhưng phong cách cửa sổ kế thừa trong Chủ đề/Generic.xaml nó hoạt động. Nhưng trong bất kỳ Tài nguyên nào khác, bạn sẽ nhận được một cửa sổ màu đen. (VS 2008 - WPF 3.5)

0

Thử cài đặt gói DirectX mới nhất trên máy khách.

1

Một cách giải quyết có thể là để buộc chế độ phần mềm dựng hình:

http://msdn.microsoft.com/en-us/library/system.windows.interop.rendermode.aspx

Trong 3.5 này có thể được đặt trên một cơ sở cho mỗi cửa sổ http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndtarget.rendermode%28VS.90%29.aspx và trong 4.0 có bổ sung là một quá trình rộng thiết lập: http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx

+0

Tôi sẽ kiểm tra điều này ngay sau khi tôi có thời gian có sẵn –

+0

Điều này không giải quyết được vấn đề thực tế; Tôi không thể coi đây là một "câu trả lời" nhưng là một suy đoán. – Sung

7

Chúng tôi (www.novamind.com) đã có nhiều khách hàng trong quá khứ có các vấn đề tương tự mà ứng dụng sẽ không vẽ chính xác hoặc hoàn toàn không. Lý do là:

  • trình điều khiển đồ họa không được cập nhật.
  • Chủ đề Windows bị hỏng. Thay đổi chủ đề Windows thành một cái gì đó khác biệt và ngược lại, giải quyết vấn đề.
  • Windows đang chạy trong một máy ảo. Hầu hết các máy ảo đều có tính năng tăng tốc phần cứng thử nghiệm thường không hỗ trợ đúng các ứng dụng WPF. - Tắt tăng tốc phần cứng sẽ giải quyết được vấn đề.

này cũng có thể giúp:

  • Cài đặt lại khuôn khổ NET - đôi khi quá trình cài đặt bị hỏng.
  • Đảm bảo rằng tất cả các bản cập nhật Windows gần đây đã được cài đặt.

Hy vọng điều này sẽ hữu ích. Chúc may mắn.

+0

Tôi không thể xác định nguồn gốc của vấn đề vì nó không xảy ra lần nữa. Tôi đã trao tiền thưởng cho cái này vì nó có vẻ là vấn đề chính đáng nhất. Xin lỗi vì tất cả những người khác bị bỏ lại. –

2

Tôi gặp sự cố này chỉ khi bật GlassFrame trong khung cửa sổ.

Thử đặt GlassFraneThickness thành 0 và cửa sổ của bạn sẽ hiển thị lại. Tuy nhiên, bạn sẽ mất khung kính nhưng tốt hơn một ứng dụng màu đen.

<shell:WindowChrome.WindowChrome> 
    <shell:WindowChrome CaptionHeight="32" GlassFrameThickness="0" ResizeBorderThickness="5" CornerRadius="0" /> 
</shell:WindowChrome.WindowChrome> 

Có thể bạn cũng có thể cố gắng buộc cửa sổ sơn lại. Im trường hợp của tôi nội dung cửa sổ cho thấy khi tôi di chuyển cửa sổ đến màn hình khác hoặc ra khỏi khung nhìn và trong một lần nữa, do đó, một repaint dường như làm công việc.

Trong Microsoft.Windows.Shell sourcecode có một chức năng _FixupWindows7Issues() (trong lớp WindowChromeWorker) mà nên giải quyết vấn đề theo đó là bình luận, nhưng rõ ràng không ...

+0

Đặt GlassFrameThickness = "0" cố định với tôi. – RHaguiuda

0

Gần đây tôi đã chạy vào một vấn đề tương tự với một cửa sổ màu đen trong WPF, trong một giải pháp VB 2010/.Net 4.0, nơi mỗi cửa sổ khác làm việc tốt. Thủ phạm hóa ra là cách thức mà tôi đã bật tắt khả năng hiển thị, sử dụng 3 lệnh sau đây. Giải pháp là để loại bỏ tất cả ngoại trừ dòng đầu tiên, một với các tài liệu tham khảo hữu Tầm nhìn (loại bỏ chỉ dòng .Show sẽ gây ra nó để render một cách chính xác lần đầu tiên nhưng sau đó màu đen):

   Application.MisbehavingBlackWindow.Visibility = System.Windows.Visibility.Visible 
      Application.MisbehavingBlackWindow.Show() 
      Application.MisbehavingBlackWindow.Activate() 

tôi chưa bao giờ trước đây đã có một vấn đề với loạt lệnh này để hiển thị cửa sổ WPF, vì vậy tôi đoán tôi đã đi vào một rut và không bao giờ bận tâm để kiểm tra xem đó là cách tối ưu để đi về nó; ngoài thói quen, tôi chỉ dán mã khi cần thiết để triệu hồi cửa sổ. Nó vẫn hoạt động cho mọi cửa sổ khác trong mọi giải pháp khác mà tôi từng viết, nhưng nó khiến cửa sổ này trở thành màu đen. Lúc đầu nó chỉ xảy ra liên tục trong một thói quen cụ thể, sau đó trở thành vĩnh viễn không rõ lý do. Không có dòng mã nào sau đây mà tôi đã thử nghiệm với bất kỳ sự khác biệt nào:

Tước tất cả các điều khiển ra khỏi cửa sổ không có hiệu lực; nó vẫn sẽ chuyển sang màu đen nếu nó chỉ có một TextBlock duy nhất. Mặt khác, một mẫu đã xuất hiện sau khi tôi thử thực hiện nó từ các thường trình khác, đặc biệt nếu dán khối mã đầu tiên bên trong một khối gọi lên một cửa sổ khác. Nếu tôi đưa nó vào trước một khối mã như hình bên dưới, cửa sổ chuyển sang màu đen; nếu tôi đưa nó vào sau, thì không.

   Application.OtherWindow.Visibility = System.Windows.Visibility.Visible 
       Application.OtherWindow.Show() 
       Application.OtherWindow.Activate() 

Giải pháp hoạt động (cho đến nay) ngay cả khi cửa sổ bị ẩn bằng lệnh Window.Hide(). Tôi đã có một bao gồm trong một sự kiện Sub bên trong cửa sổ vi phạm, được kích hoạt bất cứ khi nào cửa sổ bị mất tập trung. Toggling nó trở lại bằng cách sử dụng tài sản Visibility vẫn làm các trick mà không đòi hỏi bất kỳ thay đổi cho rằng.

Tôi hy vọng điều này sẽ giúp bất kỳ ai gặp phải vấn đề khó chịu này. Cho đến nay, hầu hết các giải pháp mà tôi đã thấy rải rác trên Internet dường như dựa trên những thứ như Chủ đề Windows, card đồ họa và các biến bên ngoài khác, nhưng chúng ta có thể sửa chữa ít nhất một số trường hợp quyền này trong mã .Net của chúng tôi phía sau.

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