WPF效果和视频卡问题

时间:2010-02-25 23:15:23

标签: c# .net wpf windows xaml

我正在构建一个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)下运行此应用程序时,应用程序如下所示:

alt text http://i48.tinypic.com/t5t7rl.png

然后我想在32位和64位版本的Windows XP,Vista和7下测试软件,因为它使用了硬件,我想确保我的设备驱动程序在其他系统上运行良好。他们是这样。 但问题是,当我在VMware(6.5)中创建一个新虚拟机并启动应用程序时,工具栏看起来就是这样:

Windows 7(x86):

alt text http://i47.tinypic.com/w160jo.png

Windows XP(x86):

alt text http://i50.tinypic.com/28aomma.png

嗯,据我所知,由于性能原因,WPF使用硬件加速的WPF效果,而我的VMware没有可能支持像素着色器的硬件,因此我的客户端可能有一台没有像素的机器 - 支持视频卡。我无法承受为我的软件添加这样的硬件要求。

但WPF是不是应该检查客户操作系统是否支持这样的效果并使用替代的,基于软件的渲染效果?

是否有解决方案使其在所有平台上看起来都一样? (至少某种,即使质量较低,基于软件的仿真)还是一种在保持渐变的同时完全禁用效果的方法?

工具栏可以在每个操作系统(甚至VM)上点击,当我点击按钮所在位置的白色区域时,它会正确反应(点击按钮)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

VMWare已知WPF存在漏洞 - 有些已在WPF4中修复,但一般来说,您应该在VMware中禁用WPF的硬件加速:http://blog.paulbetts.org/index.php/2010/01/10/expression-blend-glitches-in-vmware-parallels显示如何执行此操作。