views:

149

answers:

1

Hi,

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>
            </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:

alt text

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):

alt text

Windows XP (x86):

alt text

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).

Thanks for help ion advance.

+1  A: 

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.

Paul Betts