2009-04-30 25 views

Trả lời

17

Lý do cho điều này là hệ thống chống răng cưa trải rộng đường kẻ trên nhiều pixel nếu nó không phù hợp với pixel thiết bị vật lý.

WPF độc lập hoàn toàn. Điều này có nghĩa là bạn chỉ định kích thước của phần tử giao diện người dùng theo inch, không phải bằng pixel. Một đơn vị logic trong WPF là 1/96 inch. Quy mô này được chọn, bởi vì hầu hết các màn hình có độ phân giải 96dpi. Vì vậy, trong hầu hết các trường hợp, 1 đơn vị logic khớp với 1 pixel vật lý. Nhưng nếu độ phân giải màn hình thay đổi, quy tắc này không còn hợp lệ nữa.

Tất cả điều khiển WPF đều cung cấp thuộc tính SnapsToDevicePixels. Nếu được đặt thành true, điều khiển đảm bảo tất cả các cạnh được vẽ chính xác trên pixel thiết bị vật lý. Nhưng tiếc là tính năng này chỉ khả dụng ở cấp độ kiểm soát.

Nguồn: Draw lines excactly on physical device pixels

+0

Lưu ý rằng thuộc tính SnapToDevicePixels không có hiệu lực trên văn bản glyphs. Hãy thử điều này trên TextBlock để xem những gì tôi có ý nghĩa. Thật không may, chúng tôi đang mắc kẹt với văn bản mờ cho bây giờ. –

+1

Có nhiều phông chữ mờ hơn ở đây: http://stackoverflow.com/questions/190344/wpf-blurry-fonts-problem-solutions – Spoike

2

Quick Fix:

Sử dụng các tùy chọn trên mỗi container từ gốc để kiểm soát mờ của bạn

 UseLayoutRounding="True" 
     RenderOptions.BitmapScalingMode="NearestNeighbor" 
     SnapsToDevicePixels="True" 
     RenderOptions.ClearTypeHint="Enabled" 

Giải thích:

UseLayoutRounding = true khắc phục sự cố bố cục pixel phụ . Chúng thường xảy ra vì ví dụ: Hiệu ứng thay đổi kích thước điều khiển để được một cái gì đó giữa các điểm ảnh.

RenderOptions.BitmapScalingMode = Gần nhấtHàng xóm sửa lỗi lấy mẫu mờ của bitmap. Bitmap được sử dụng khi các hiệu ứng hoặc các kỹ thuật khác được sử dụng. Khi chúng được áp dụng lại vào thùng chứa hoặc kiểm soát chúng có thể kết thúc bằng pixel giữa và do đó nội suy các pixel của bitmap.

SnapsToDevicePixels = "True" sửa dọc và ngang đa giác, đường dây và hình chữ nhật được trả lại Inbetween pixel

RenderOptions.ClearTypeHint = "Enabled" reenables ClearType trên văn bản. Nó bị vô hiệu hóa rất dễ dàng bởi các hiệu ứng hoặc bất cứ khi nào trình kết xuất không biết chính xác nền của một văn bản.

Bạn nên sử dụng nó trên mọi Vùng chứa vì đôi khi, ví dụ: bởi các mẫu dữ liệu, các tùy chọn này được mặc định lại cho các điều khiển phụ.

+1

Bổ sung: Bạn có thể gặp phải các sự cố trực quan trên màn hình 4K hoặc trong các trường hợp khác. Ví dụ, văn bản có thể bị rách ở giữa hoặc một số điểm ảnh bị thiếu hoàn toàn, thậm chí toàn bộ các đường 1 pixel có thể trở nên vô hình. Bạn cần thêm các kỹ thuật để khắc phục các sự cố này. – ecreif

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