(a cura 18 gennaio per aggiungere che non è solo la modalità di rendering dei font, ma anche il tipo di carattere in sé.)
Ci sono due fattori rilevanti qui: il tipo di carattere, e la modalità di formattazione dei caratteri.
L'applicazione host Windows Form impone una famiglia di font predefinita di "Microsoft Sans Serif" con una dimensione di 8,25pt, che nelle unità di misura di WPF è un FontSize
di 11. Ma WPF utilizzerà un font diverso - I eseguo Windows 7 con il tema Aero predefinito e WPF imposta l'interfaccia utente di Segoe con un FontSize
di 12.
Quindi il motivo principale per cui si ottengono risultati diversi qui è che si tratta di due tipi di carattere diversi. L'aggiunta di FontFamily="Segoe UI" FontSize="12"
all'elemento radice UserControl
rende i due esempi WPF più coerenti per me. (Ma questo, naturalmente, rendere il vostro testo WPF aspetto meno coerente con il testo nella contenente Windows Form app. Questo è il vero motivo per il ElementHost
propaga Windows Form scelta di carattere nel contenuto WPF.)
Prima Ho modificato questo, avevamo pensato che potesse essere la differenza tra le modalità Ideal
e Display
per il rendering del testo WPF. Avendo capito che si tratta principalmente del carattere, non penso più che sia così, ma lascerò qui la discussione di questo altro problema perché è ancora utile per chiunque cerchi di ottenere il testo WPF in modo coerente con Windows Forma il testo L'impostazione predefinita per WPF è Ideal
, ma se utilizzi un'applicazione Windows Form, probabilmente Display
è meglio perché ciò renderebbe l'aspetto coerente con il modo in cui Windows Form esegue il rendering delle cose.
È possibile controllare questo in WPF su una base per-elemento aggiungendo questo:
TextOptions.TextFormattingMode="Display"
(o "Display"
a seconda della modalità che si desidera). Questa proprietà collegabile è stata aggiunta in WPF v4, per consentire all'utente di scegliere tra il rendering di testo scalabile ma leggermente sfocato di WPF dalla sua prima versione e il rendering della griglia distorta ma nitida che restituisce Win32 e GDI + (e quindi Windows Forme) utilizzare. Ciò influenzerà l'elemento a cui lo si applica e anche eventuali discendenti. (Ad esempio, se si imposta questo valore su StackPanel
, questo dovrebbe applicarsi a tutti gli elementi in quel pannello, a meno che non lo si imposti anche su un valore diverso localmente sui bambini.)
Per impostazione predefinita, WPF tenta di mantenere una migliore fedeltà al design del carattere di carattere originale rispetto a Win32 o GDI +. Inoltre, rende il testo in un modo che lo riduca in modo coerente, aumentando la dimensione del carattere, diciamo che il 12% ingrandirà la larghezza del testo del 12% sullo schermo. Questo non è il caso in Win32 o GDI + dove si ottengono cambiamenti non lineari piuttosto complessi.
Ma molte persone si sono lamentate dell'aumento di sfocatura che si ottiene in cambio della migliore fedeltà. Ecco perché WPF 4 ha introdotto questa nuova proprietà. Impostalo su Display
per ottenere un rendering vecchio stile meno preciso ma più nitido.
Dal momento che è possibile sceglierlo in base all'elemento, è possibile scegliere quale ti piace l'aspetto di indipendentemente per te in grassetto e il testo normale.
Spiacente, non l'ho scritto, ho provato TextFormattingMode e SnapsToDevicePixels - nessun risultato per l'UserControl ospitato. –
SnapsToDevicePixels non sarà di aiuto. Dove stai impostando il TextFormattingMode? Su UserControl o sulle etichette? (E che bit non hai scritto?) –
Ho provato entrambi i modi, su UserControl e sulle etichette, il risultato era lo stesso. Niente è cambiato. –