I'm building a WPF application and this WPF application is having a toolbar-like panel that I use for adding button based on the context.
The code of the toolbar is:
<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&开发者_高级运维gt;
</ItemsControl.ItemsPanel>
</ItemsControl>
<Border VerticalAlignment="Bottom" Height="0.5" BorderThickness="0.5" BorderBrush="Black"/>
</Grid>
When I run this application under Windows 7 (x64, .NET 3.5 sp1, C2Q, GeForce GTX 280) the application looks like this:
Then I wanted to test the software under Windows XP, Vista and 7 in both 32 and 64 bit versions as it makes use of a hardware and I wanted to make sure that my device drivers work well on the other systems too. They do. But the problem is that when I've created a new virtual machine in VMware (6.5) and lunched the application, the toolbar looked this way:
Windows 7 (x86):
Windows XP (x86):
Well, I understand that WPF makes use of the hardware-accelerated WPF effects for perfomance reasons and my VMware doesn't have a hardware that might support the pixel shaders, so might my client have a machine that does not have a pixel-shader supporting video card. I cannot afford adding such a hardware requirement for my software.
But isn't WPF supposed to check if the guest OS supports such effects and use an alternative, software-based rendering effects?
Is there a solution for this to make it look the same on all platforms? (at least some kind of , even if lower quality, software-based emulation) or a way to completely disable the effects while keeping the gradient?
The toolbar is clickable on every OS (even VM) and when I click on the white area in a place where a button should be it reacts correctly (the button gets clicked).
VMWare has known bugs with WPF - some are fixed in WPF4, but in general, you should disable WPF's HW acceleration in VMware: http://blog.paulbetts.org/index.php/2010/01/10/expression-blend-glitches-in-vmware-parallels shows how to do it.
精彩评论