2008-09-08 16 views
11

Vì vậy, tôi đã đọc các nguyên tắc về giao diện người dùng Windows Vista có liên quan đến một câu hỏi khác và họ đã đề cập rằng bạn có thể tồn tại một chuyển đổi thành 120 DPI. Vâng, tôi khởi động máy ảo tiện dụng của mình với ứng dụng được cài đặt và chúng tôi sẽ nhận được gì ... AAAAGH !!! MASSIVE UI FAIL!Giao diện người dùng độc lập cỡ chữ: mọi thứ đã bị hỏng khi tôi chuyển sang 120 DPI?

Mọi thứ đều lộn xộn: một số vùng chứa không đủ lớn cho văn bản của họ; một số điều khiển đã được định vị "bên cạnh nhau" bây giờ tất cả được chia nhỏ với nhau/trải rộng; một số nút không đủ cao; các cột ListView của tôi không đủ rộng ... eeek.

Có vẻ như cách tiếp cận hoàn toàn khác là theo thứ tự. Trước đây của tôi về cơ bản đã được sử dụng thiết kế Windows Forms VS2008 để tạo ra, tôi đoán, một bố trí dựa trên pixel. Tôi có thể thấy rằng nếu tôi đã gắn bó với Windows Forms, FlowLayoutPanel s sẽ hữu ích, mặc dù tôi đã tìm thấy chúng thay vì không linh hoạt trong quá khứ. Họ cũng không giải quyết được vấn đề nơi các thùng chứa (ví dụ: bản thân biểu mẫu) không đủ lớn; có lẽ có một cách để làm điều đó? Có thể là tài sản AutoSize?

Đây cũng có thể là dấu hiệu cho thấy đã đến lúc chuyển tàu tới WPF; Tôi ấn tượng rằng nó được thiết kế đặc biệt cho loại điều này.

Vấn đề cơ bản dường như đi xuống này:

  • Nếu tôi được gắn bó với Windows Forms, tất cả các thủ đoạn để đạt được một bố cục font-size độc ​​lập có thể tồn tại người dùng thiết là những gì mình phông chữ lớn, hoặc thiết lập màn hình hiển thị đến 120 DPI?
  • WPF có lợi thế đáng kể ở đây không và nếu có, bạn có thể cố gắng thuyết phục tôi rằng nó đáng để chuyển đổi không?
  • Có bất kỳ "phương pháp hay nhất" chung nào cho bố cục độc lập với kích thước phông chữ, trong ngăn xếp .NET hay nói chung không?

Trả lời

11

Tìm hiểu cách các NeoDock tính làm việc trên điều khiển của bạn, rời khỏi mọi thứ có thể tự động Tự động kích hoạt và sử dụng TableLayoutPanel khi có thể.

Nếu bạn thực hiện ba điều này, bạn sẽ nhận được rất nhiều trải nghiệm thiết kế WPF trong Windows Forms. Một thiết kế tốt TableLayoutPanel sẽ làm hết sức mình để điều chỉnh kích thước các nút điều khiển sao cho chúng phù hợp với mẫu. Kết hợp với Tự động điều chỉnh điều khiển, kết nối và AutoScaleMode được đề cập bởi Soeren Kuklau, bạn sẽ có thể tạo ra thứ gì đó có quy mô tốt. Nếu không, biểu mẫu của bạn có thể chỉ có quá nhiều điều khiển trên đó; xem xét tách nó thành các trang tab, hộp công cụ nổi hoặc một số không gian khác.

Trong WPF dễ dàng hơn nhiều vì khái niệm điều khiển tự động định cỡ được tích hợp sẵn; trong hầu hết các trường hợp, nếu bạn đang đặt một phần tử WPF bằng cách sử dụng cặp phối hợp bạn đang làm sai. Tuy nhiên, bạn không thể thay đổi thực tế là ở độ phân giải thấp hơn, nó không mất nhiều văn bản 120 dpi để lấp đầy màn hình. Đôi khi vấn đề không phải là bố cục của bạn, mà là một nỗ lực để đặt quá nhiều vào một không gian nhỏ.

+0

Tôi đã luôn sử dụng Anchor, Dock, AutoSize và TableLayoutPanels để đạt được các giao diện người dùng có thể dịch và dẫn đến các biểu mẫu có thể thay đổi kích thước. Tuy nhiên, trong cài đặt DPI cao với hộp kiểm "XPI scale scaler" XP bị tắt, tôi thấy mọi ứng dụng của tôi đều có phông chữ mờ. Bất kỳ lời khuyên về sửa chữa đó? –

+2

@romkyns: Trừ khi ứng dụng của bạn nêu rõ rằng đó là "nhận thức dpi cao", ứng dụng của bạn có cùng sửa lỗi kludge mà tất cả các ứng dụng lỗi khác nhận được. Khi bạn yêu cầu dpi hiện tại ứng dụng của bạn được nói dối (nói với nó là 96), và card đồ họa sẽ mở rộng biểu mẫu của bạn cho bạn - làm cho nó mờ đi. Microsoft đã từ bỏ việc cố gắng làm cho các nhà phát triển thực hiện những gì họ phải làm - đó là lý do tại sao mọi người phải chọn ** out of scaling. Google: tệp kê khai 'dpiAware'. –

4

Nếu tôi được gắn bó với Windows Forms, tất cả các thủ đoạn để đạt được một bố cục font-size độc ​​lập có thể tồn tại người dùng thiết lập phông chữ của ông lớn, hoặc thiết lập hiển thị tới 120 DPI là gì?

Đối với một, AutoScaleMode có thể là bạn của bạn.

4

Nói chung, sự cố là một trong hai cách sử dụng "hằng số" khác nhau cho bố cục biểu mẫu và sau đó thay đổi một trong các hằng số đó mà không thay đổi các hằng số khác.

Bạn đang sử dụng pixel cho các thực thể biểu mẫu và các điểm (về cơ bản là inch) để chỉ định kích thước phông chữ. Điểm ảnh và điểm có liên quan bởi DPI, vì vậy bạn thay đổi DPI và đột nhiên giá trị cố định pixel của bạn không khớp với giá trị cố định điểm của bạn.

Có các gói và lớp học cho điều này, nhưng vào cuối ngày, bạn phải chọn một đơn vị này hoặc đơn vị khác hoặc chia tỷ lệ một trong các đơn vị theo hằng số thay đổi.

Cá nhân, tôi muốn thay đổi các thực thể trên biểu mẫu thành inch. Tôi không phải là một người C#, vì vậy tôi không biết nếu điều này được hỗ trợ nguyên bản, hoặc nếu bạn phải thực hiện một số kích thước hình thức năng động khi khởi động ứng dụng.

Nếu bạn phải làm điều này trong phần mềm của mình, hãy tiếp tục và định kích thước mọi thứ bình thường (ví dụ 96 DPI thông thường).

Khi ứng dụng của bạn bắt đầu, hãy xác minh hệ thống ở 96 DPI trước khi bạn hiển thị biểu mẫu của mình. Nếu nó là, tuyệt vời. Nếu không, sau đó thiết lập một biến với các yếu tố sửa chữa, và quy mô và dịch (sửa đổi cả vị trí và kích thước) của từng thực thể trước khi bạn hiển thị biểu mẫu.

Cuối cùng, tuy nhiên, sẽ chỉ định mọi thứ theo inch hoặc điểm (một điểm là 1/72 inch) và để thỏa thuận hệ điều hành với nó. Bạn có thể phải đối phó với trường hợp góc (một màn hình ngoài trời với thiết lập đúng DPI sẽ hiển thị ứng dụng của bạn trong một vài điểm ảnh ...)

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