2010-03-08 25 views
46

任何人都可以提出WPF 4.0中何時使用SnapsToDevicePixels的指導原則嗎?什麼時候應該使用WPF 4.0中的SnapsToDevicePixels?

它應該只在偶爾使用,如果有問題,在應用程序中寬泛地使用,僅限於某些控件或什麼?

+3

我喜歡認爲乾淨清爽的線條讓您的應用感覺專業和修剪整齊。所以,我的建議是在任何有助於實現這一目標的地方使用它。 – cplotts 2010-04-08 17:16:02

回答

73

斯賓塞和馬丁對的好的答案當來對齊你的像素。

至於如何:我也想指出,應該在WPF 4.0嘗試使用屬性UseLayoutRounding,而不是SnapsToDevicePixels

UseLayoutRounding,使你在做什麼使用Silverlight兼容(SnapsToDevicePixels是不是在Silverlight中可用)...和微軟也鼓勵其在documentationSnapsToDevicePixels使用UseLayoutRounding

兩者有什麼區別?那麼,一個很大的區別是,UseLayoutRounding發生在佈局階段,而SnapsToDevicePixels發生在渲染階段。這讓我推測UseLayoutRounding可能是一個更高性能的方法(雖然我沒有證實這一點)。

就這麼說,仍然有理由使用SnapsToDevicePixels。實際上,MSDN文檔指向一個。我會再補充一點:只有SnapsToDevicePixels可以使用準則進行精確控制。

這裏有一些關於這個問題的資源(即像素貼緊和清晰度的圖像,文字和視覺效果):

heh。我知道我的回答比您要求的要多一點......但是這個概念(即解決方案獨立性及其帶來的問題以及如何克服它們)通常可以在使用WPF時使用frustration。至少,我想告訴你新的WPF 4.0屬性,UseLayoutRounding

UPDATE

我只需要添加,因爲我已經看到了這個一遍又一遍......有時SnapsToDevicePixels作品時UseLayoutRounding沒有。我希望我能指出爲什麼會出現這種情況,但是首先嚐試使用UseLayoutRounding,如果這不起作用,請不要猶豫,試試SnapsToDevicePixels

那條線很鋒利可以切斷你!

+0

更多=在許多情況下更好,這是我遇到的許多問題的一個很好的答案,尤其是因爲我懇求讓我感覺我最好將我的WPF/Linq to SQL應用程序移植到Silverlight/Linq到EF – 2010-04-09 01:20:37

+0

莫名其妙SnapsToDevicePixels = true真的壓倒WPF的表現? – 2012-09-28 16:36:50

+1

@Peretz可能不明顯......但打開它確實會增加必須完成/計算的內容。如果你有很多視覺效果,效果可能會很明顯。然而,更有可能的是,性能普遍較差的情況下性能會下降。 – cplotts 2012-09-29 10:35:16

5

一種情況是您正在顯示圖像或視頻。如果您沒有捕捉到設備像素(即視頻屏幕的像素),則使用某種算法(插值,反鋸齒)將圖像的像素「置於」屏幕像素之間,顯示的內容不會顯示與原始圖像一樣好。圖像會失去一些清晰度。

8

它應該用於控件或像素位置具有含義的區域。與繪圖應用程序的畫布相關的控件就是一個例子。你見過碎片驅動器的地圖嗎?這可能是另一個例子。

我能想到的一個例外是當你使用某種分隔線時。雖然大多數人認爲邊界線如果這個設置關閉是穩定的,他們可能看起來模糊和分心。

基本上,如果模糊的邊緣=壞,那就把它關掉。

+6

您可能的意思是*「如果邊緣模糊 - 打開它*」(設置'SnapsToDevicePixels = true'以消除模糊)。 – Sinatr 2015-09-14 14:24:20

1

剛注意到它對邊界非常有用。其他信息here

<Style TargetType="Border" > 
     <Setter Property="SnapsToDevicePixels" Value="True" /> 
</Style> 
相關問題