【发布时间】:2010-02-25 23:15:22
【问题描述】:
我正在构建一个 WPF 应用程序,这个 WPF 应用程序有一个类似工具栏的面板,我使用它来根据上下文添加按钮。
工具栏的代码是:
<Grid x:Name="ToolBarGrid" VerticalAlignment="Top" Height="46">
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFDEDEDE" Offset="1"/>
<GradientStop Color="White"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.Effect>
<DropShadowEffect Direction="270" BlurRadius="26" Opacity="0.215" Color="#FF647A9B"/>
</Grid.Effect>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ItemsControl Grid.Row="0" Grid.Column="0" Name="Toolbar" Margin="0" Padding="0" VerticalAlignment="Top" Height="46" ItemsSource="{Binding View.ToolbarElements}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Border VerticalAlignment="Bottom" Height="0.5" BorderThickness="0.5" BorderBrush="Black"/>
</Grid>
当我在 Windows 7(x64、.NET 3.5 sp1、C2Q、GeForce GTX 280)下运行此应用程序时,应用程序如下所示:
然后我想在 32 位和 64 位版本的 Windows XP、Vista 和 7 下测试该软件,因为它使用了硬件,并且我想确保我的设备驱动程序在其他系统上也能正常工作。他们是这样。 但问题是,当我在 VMware (6.5) 中创建新的虚拟机并启动应用程序时,工具栏看起来是这样的:
Windows 7 (x86):
Windows XP (x86):
好吧,我知道 WPF 出于性能原因使用硬件加速的 WPF 效果,而我的 VMware 没有可能支持像素着色器的硬件,所以我的客户可能有一台没有像素的机器- 支持视频卡的着色器。我负担不起为我的软件添加这样的硬件要求。
但是 WPF 不应该检查来宾操作系统是否支持此类效果并使用基于软件的替代渲染效果吗?
是否有解决方案让它在所有平台上看起来都一样? (至少某种,即使质量较低,基于软件的仿真)或一种在保持渐变的同时完全禁用效果的方法?
工具栏在每个操作系统(甚至虚拟机)上都是可点击的,当我点击按钮所在位置的白色区域时,它会做出正确反应(按钮被点击)。
【问题讨论】:
-
我已取消选中 VMware 中的“加速 3D 图形 (DirectX 9.0c)”,一切都完美呈现。但仍然知道为什么会这样吗?