2011-10-10 38 views
5

Đối với bố cục XAML đã cho yêu cầu màu trắng nửa trong suốt (để cung cấp hiệu ứng giống như kính trong trường hợp này), phương pháp nào thích hợp hơn để đặt minh bạch và lý do ?:Hiệu suất XAML: Đặt kênh alpha của bàn chải so với Độ mờ của FrameworkElement

  1. Đặt kênh alpha của bàn chải. Ví dụ. #12FFFFFF
  2. Đặt độ mờ của chính khung công tác FrameworkElement, để bút vẽ màu trắng 100%.

Ngoài ra, câu trả lời có khác biệt giữa WPF (4.0) và Silverlight không?

+0

Từ MSDN [Tài liệu] (http://msdn.microsoft.com/en-us/library/bb613584.aspx#Opacity) – dowhilefor

Trả lời

6

Trực tiếp từ MSDN:

Opacity trên Brushes so với Opacity trên Elements

Khi bạn sử dụng một Brush để thiết lập Fill hoặc Stroke của một phần tử, nó là tốt hơn để thiết lập Brush Giá trị .Opacity thay vì thiết lập thuộc tính Opacity của phần tử . Sửa đổi thuộc tính Opacity của một phần tử có thể làm cho WPF tạo ra một bề mặt tạm thời.

Nhưng bất kể, lưu ý rằng bạn vẫn đang khiến đường dẫn hiển thị hoạt động nhiều hơn. Opacity ngụ ý nó phải kết hợp các điểm ảnh từ nhiều nguồn để tìm ra giá trị RGB cuối cùng. Vì vậy, nếu nó hoàn toàn có thể loại bỏ sự trong suốt hoàn toàn và thay vào đó mô phỏng nó bằng một cọ mờ, bạn nên làm như vậy. Có vẻ như điều đó có thể không xảy ra trong trường hợp của bạn, nhưng nó thường có thể xảy ra.

+0

Awrite kent;) –

+0

Greets! Hy vọng tất cả là tốt tại BC. –

+0

Yep cho đến nay rất tốt –

0

nó phụ thuộc vào có bao nhiêu đối tượng bạn đang đi để hiển thị (của các loại trên), làm thế nào Brush được tạo ra vv ...

Ví dụ, nếu bàn chải được thiết lập trong ví dụ 1 như một StaticResource sau đó nó được tạo ra một lần, trong khi nếu nó được thiết lập như là một chuỗi nền = "# 12FFFFFF" sau đó nó sẽ được tạo ra một lần cho mỗi instantiation của đối tượng. Điều đó một mình sẽ có tác động hiệu suất, mặc dù không đáng kể

Sử dụng Brushes.White và thiết lập Opacity có nghĩa là bạn sẽ sử dụng một trường hợp tĩnh của bàn chải (trắng) và độ mờ đục để bạn tạo ít đối tượng hơn.

Cách tốt nhất để tìm ra tâm trí là một thử nghiệm cụ thể - bạn đã thực hiện bất kỳ hồ sơ chưa?

Chỉnh sửa: Tôi nên thêm nếu bạn chỉ tạo một vài đối tượng ở trên mà tôi không nghĩ bạn cần lo lắng về hiệu suất. Tuy nhiên, đối với năm 1000, một thử nghiệm cụ thể sẽ là khôn ngoan

+0

Cảm ơn. Trong trường hợp này, nó cho một bản vẽ khá phức tạp có chứa rất nhiều đối tượng GeometryDrawing. Cảm ơn câu trả lời của bạn. –

+0

Tôi nghĩ rằng bạn có thể tìm thấy những cải tiến hiệu suất đáng kể hơn có thể được thực hiện bằng cách sử dụng Ảo hóa hoặc điều chỉnh những gì bạn sử dụng để hiển thị. Bạn đã thấy những liên kết này chưa? http://stackoverflow.com/questions/7710569/best-performing-class-for-drawing-in-wpf/7711139#7711139 http://stackoverflow.com/questions/7560922/improving-canvas- hiệu suất –

0

Đặt Opacity của FrameworkElement sẽ đặt Opacity của mọi trẻ em trong FrameworkElement đó. Nếu FrameworkElement phải có con (các nút, hộp văn bản hoặc bất kỳ mục nào khác), bạn phải đi với tùy chọn 1.

Nếu nó chỉ là một hình chữ nhật màu trắng phủ lên thứ gì đó, animate một tài sản Opacity hơn một bàn chải, trong trường hợp bạn cuối cùng sẽ muốn điều đó.

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