直径3インチの円の形をした物理的なオブジェクトがあります。私のアプリケーションはこの円の形をスクリーンに移し、ユーザはサークルオブジェクトからアプリケーションに見えるものを視覚的にチェックすることができます。私が持っている問題は、直径が3インチで、すべてのモニタータイプとすべての解像度で同じサイズのサークルオブジェクトが必要なことです。すべての解像度で円の同径WPF(解像度の独立性)
これは可能ですか?私は、WPFを使用していますが、すでにこのような何かしている:期待、これは1920×1200解像度の言うことには非常にうまく機能したよう
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();
}
:DIUコンバータへ
<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>
...
マイインチは次のようになりますモニターが、私が低くなるにつれて、自然にすべてが大きく見えます。私の<Ellipse>
タグの直径は、人のモニターがどんな解像度であっても常に3インチにする必要があります。
ありがとうございます!
私は長年の機能を使用していませんが、WPFはサイズ単位としてインチをネイティブにサポートしていると思います。幅と高さを '3in'に設定するだけでどうなりますか? Windows DPIの設定では、モニタの実際の解像度が反映されることはほとんどないため、サイズを完全に取得することはめったにありません。 –
あなたのコメントを読むと、WPFに物理的なUOMがあるとは思えないので、私は興奮しました。私はそれを試して、それは私の1920x1200解像度のモニターで素晴らしい仕事をしましたが、残念ながら、より小さい解像度で1インチに3インチに等しくなかった –
私は言ったように、モニターが長い間96dpi真のピッチが120dpiに近いことが多い場合でも残念ながら、実際のピクセルサイズが何であるかを知る方法はありません。あなたは近づくことができますが、正確になることはありません。悲しいことに、DPIのWindowsのレポートは、現実にはあまり似ていない傾向があります。 –