写一个判断操作系统的工具类OSHelper.cs
public class OSHelper{ // 获取操作系统ID public static System.PlatformID GetPlatformID() { //获取系统信息 System.OperatingSystem osInfo = System.Environment.OSVersion; //获取操作系统ID System.PlatformID platformID = osInfo.Platform; return platformID; } // 获取主版本号 public static int GetVersionMajor() { //获取系统信息 System.OperatingSystem osInfo = System.Environment.OSVersion; //获取主版本号 int versionMajor = osInfo.Version.Major; return versionMajor; } // 获取副版本号 public static int GetVersionMinor() { //获取系统信息 System.OperatingSystem osInfo = System.Environment.OSVersion; //获取副版本号 int versionMinor = osInfo.Version.Minor; return versionMinor; } //C#判断操作系统是否为Windows98 public static bool IsWindows98 { get { return (Environment.OSVersion.Platform == PlatformID.Win32Windows) && (Environment.OSVersion.Version.Minor == 10) && (Environment.OSVersion.Version.Revision.ToString() != "2222A"); } } //C#判断操作系统是否为Windows98第二版 public static bool IsWindows98Second { get { return (Environment.OSVersion.Platform == PlatformID.Win32Windows) && (Environment.OSVersion.Version.Minor == 10) && (Environment.OSVersion.Version.Revision.ToString() == "2222A"); } } //C#判断操作系统是否为Windows2000 public static bool IsWindows2000 { get { return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 0); } } //C#判断操作系统是否为WindowsXP public static bool IsWindowsXP { get { return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 1); } } //C#判断操作系统是否为Windows2003 public static bool IsWindows2003 { get { return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 2); } } //C#判断操作系统是否为WindowsVista public static bool IsWindowsVista { get { return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor == 0); } } //C#判断操作系统是否为Windows7 public static bool IsWindows7 { get { return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor == 1); } } //C#判断操作系统是否为Unix public static bool IsUnix { get { return Environment.OSVersion.Platform == PlatformID.Unix; } } //利用C#判断当前操作系统是否为Win8系统 public static bool IsWindows8() { Version currentVersion = Environment.OSVersion.Version; Version compareToVersion = new Version("6.2"); if (currentVersion.CompareTo(compareToVersion) >= 0) return true; else return false; }}问题来源: 做WPF的时候,发现部分UI在不同操作系统下的表现不一致,例如ListBox中的元素Item在Win10中水平间距自动平均分的,即指定了Item的宽高,但不指定Margin,会自动计算出Margin以平均间距,但是在Win8中不会如此,即所有Item靠左对齐,导致右边有一段空白。所以需要根据不同OS做UI的适配。
根据这一问题,解决办法是在XAML中ListBox使用< ListBox.ItemTemplate >< DataTemplate >,然后将Margin=”{Binding Margin}”使用MVVM绑定界面属性到ViewModel中,然后给ItemsSource绑定的列表中的实体类新增这个Margin属性(类型最好是Thickness,如果只有一个值也可以是int)。
重要的参考:
http://blog.csdn.net/yl2isoft/article/details/17336329 https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724834(v=vs.85).aspx
新闻热点
疑难解答