tôi nhận xét trên mà tôi đã cùng một vấn đề và từ đó giải quyết nó. Tôi đang viết những thay đổi của tôi ở đây cho bất kỳ ai khác. Như đã quan sát ở trên, hành vi dường như xảy ra bất cứ khi nào sử dụng Windows UI mở rộng trong một ứng dụng WinForms và trình biên dịch Just In Time (JIT) xử lý bất kỳ thứ gì từ các thư viện WPF. Trong trường hợp của tôi, nhập một phương thức có chứa mã mở phiên bản WPF của MessageBox sẽ làm cho nó xảy ra. Thông thường Windows sẽ xử lý việc mở rộng quy mô cơ bản cho bạn, hiển thị trên màn hình bitmap offscreen và sau đó vẽ nó trên màn hình nhưng tăng kích thước. Khi WPF tải nó dường như để tiếp nhận, như thể nó nói với Windows, "Hey .. tôi đã nhận này ..". Sau đó Windows ngừng mở rộng quy mô WinForms cho bạn và bạn kết thúc với phiên bản quy mô 1x và thường là một số điều khiển nhầm lẫn. Tuy nhiên, phần WPF đang xử lý quy mô riêng của nó và có vẻ tốt.
Vì vậy, cách tôi đã đi về giải quyết nó là để nói với Windows rằng tôi sẽ xử lý quy mô WinForms. Để kích hoạt tính năng mà bạn có để thêm video này biểu hiện ứng dụng của bạn (dll manifest bị bỏ qua)
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
HOẶC bỏ ghi chú phần sau nếu nó là đã có trong đó:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
Bạn có thể thêm một file manifest :
Right click on application project -> Add -> New item... -> Application Manifest File
Sau đó, trong ...
Application Project -> Properties -> Application -> Resources
Hãy chắc chắn rằng "Manifest" được thiết lập để app.manifest
Bây giờ bạn có thể tìm thấy tập tin đó và thêm XML trên vào <asmv1:assembly>
phần tử gốc.
Nếu bạn đã thực hiện các ứng dụng mặc định hiển nhiên và bổ sung yếu tố đó nó có thể trông giống như sau
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</asmv1:assembly>
Bây giờ khi bạn bắt đầu WinForms của bạn ứng dụng bạn sẽ thấy đó là crisper nhiều bởi vì nó đang được trả lại tại dpi cao thay vì 96dpi và sau đó thu nhỏ để lấp đầy không gian.
Có thể bạn sẽ nhận thấy rằng rất nhiều hình ảnh của bạn đã bị thu hẹp !! Trong trường hợp của tôi, các nút, MenuStripItems và ToolStripItems không mở rộng như mong muốn.
gì tôi thấy được rằng hầu hết các điều khiển có một phương pháp mà bạn có thể ghi đè như sau
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
}
này được gọi khi ra mắt ứng dụng và các bộ lọc thông qua điều khiển của bạn từ hình thức chính. Windows của tôi được đặt thành 200%, chế độ mở rộng của biểu mẫu chính được đặt thành DPI và tất cả các biểu mẫu được thiết kế ở tỷ lệ 100% (96dpi). Tôi đã thay đổi mọi thứ trong nỗ lực đầu tiên của mình để khắc phục vấn đề kế thừa chế độ mở rộng và đây là những gì đã làm việc cho tôi, nếu bạn đang sử dụng phông chữ hoặc không ai nghi ngờ nó sẽ hoạt động giống nhau nhưng tôi chưa thử.
Như tôi đã 200% UI rộng khi phương pháp này được gọi là factor
chỉ đơn giản là {2,0, 2,0} mà tôi sử dụng để tái tạo một quy mô Image
trong Button
s, và để tăng ImageScalingSize
trên mỗi Items
của MenuStrip
và ToolStrip
vì chúng không nhận được cuộc gọi ScaleControl. Nếu bạn chưa bao giờ thêm XML ở trên thì phương thức này vẫn được gọi nhưng sẽ chỉ có {1.0, 1.0} cho yếu tố, điều này không hữu ích. Lưu ý: nếu bạn đang sử dụng danh sách hình ảnh thì không tự động đặt hình ảnh nếu trong DesignMode hoặc ImageList sẽ không được đặt và khi bạn lưu thì không có gì sẽ được đặt
Cũng không phải yếu tố đó là yếu tố . Những gì bạn sẽ thấy là nếu bạn di chuyển ứng dụng giữa các màn hình dpi khác nhau, bạn sẽ nhận được 2.0, sau đó là 0.5, sau đó là 2.0, sau đó 0.5, v.v.
Ứng dụng WinForms của tôi trông siêu sắc nét và có thể gọi các phần tử WPF ui mà không cần khùng! yyayyyyy
Hy vọng điều này sẽ giúp người
http://www.codeproject.com/Tips/130414/Host-Windows-Form-Controls-in-WPF hãy nhìn vào liên kết này, tôi nghĩ rằng vui lòng cung cấp hình thức cửa sổ của bạn cụ thể chiều rộng và chiều cao và sau đó đã cố gắng để tải kiểm soát người dùng con của bạn. Do trẻ em thêm nội dung được thêm vào biểu mẫu của bạn và nó đến để biết rằng nó đòi hỏi nhiều không gian hơn, đó là lý do tại sao nó co lại. –
cảm ơn ý kiến của bạn Ashok. Tôi đã thử đặt chiều rộng và chiều cao cho cửa sổ chính. Nhưng vẫn còn cùng một vấn đề tồn tại ... – balaji
Bất kỳ tiến bộ nào về điều này? Tôi có chung vấn đề đó. – user958578