我有一個直徑爲3英寸的圓形物理對象。我的應用程序將此圓形轉換到屏幕上,以便用戶可以從圓對象中直觀地查看它們在應用程序中看到的內容。我遇到的問題是,我需要圓形物體的直徑爲3英寸,並且在所有顯示器類型和所有分辨率上顯示相同的大小。所有分辨率的圓相同直徑WPF(分辨率獨立)
這可能嗎?我使用WPF和有這樣的事情已經:
<Window.Resources>
<behaviors:InchesToIndependentUnitsConverter x:Key="InchesToDeviceIndependentUnits" />
</Window.Resources>
...
<Ellipse x:Name="MyCircle" Height="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}" Width="{Binding CircleDiameter, Converter={StaticResource InchesToDeviceIndependentUnits}}" Margin="0,0,0,20" Fill="White" BorderBrush="Black" BorderThickness="1" VerticalAlignment="Top" HorizontalAlignment="Center"></Ellipse>
...
我對DIU轉換英寸看起來是這樣的:
public class InchesToIndependentUnitsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
int diameterDIU = 0;
if ((double)value > 0)
{
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{
diameterDIU = (int)((g.DpiX/96) * value);
}
}
return diameterDIU;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
throw new NotImplementedException();
}
正如預期的那樣,這個作品非常好上說,1920×1200個解析度顯示器,但是當我開始變得更低時,自然一切看起來更大。無論人的顯示器的分辨率如何,我都需要我的<Ellipse>
標籤的直徑始終爲3英寸。
謝謝!
我沒有使用年齡的功能,但我確實相信WPF本身支持英寸作爲大小單位。如果您只是將寬度和高度設置爲「3in」,會發生什麼情況?請注意,由於Windows DPI設置很少反映顯示器的_actual_ resolution_,所以很少(如果有的話)尺寸完美無缺。 –
當我閱讀你的評論時,我很興奮,因爲我不知道WPF有這樣的物理UOM。我試了一下,它在我的1920x1200 res顯示器上效果很好,但不幸的是它不等於3英寸,分辨率較低 –
就像我說過的,如果有的話,你很少會得到完全匹配,因爲顯示器早已報告了96dpi即使真實音調經常接近120dpi也是如此。不幸的是,沒有辦法知道_actual_物理像素的大小。你可以接近,但你不會確切。令人難過的事情是,Windows報告的DPI價值往往不像現實。 –