Я создаю приложение 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), приложение выглядит так:
Затем я хотел протестировать программное обеспечение под Windows XP, Vista и 7 в 32- и 64-разрядных версиях, так как оно использует аппаратное обеспечение, и я хотел убедиться, что мои драйверы устройств работают хорошо и в других системах. Они делают.
Но проблема в том, что когда я создал новую виртуальную машину в VMware (6.5) и запустил приложение, панель инструментов выглядела так:
Windows 7 (x86):
Windows XP (x86):
Хорошо, я понимаю, что WPF использует аппаратно-ускоренные эффекты WPF по причинам производительности, и у моего VMware нет оборудования, которое могло бы поддерживать пиксельные шейдеры, поэтому у моего клиента может быть машина, у которой нет пикселя. шейдер с поддержкой видеокарты. Я не могу позволить себе добавить такое аппаратное требование для моего программного обеспечения.
Но не должен ли WPF проверять, поддерживает ли гостевая ОС такие эффекты, и использовать альтернативные программные эффекты рендеринга?
Есть ли решение для того, чтобы оно выглядело одинаково на всех платформах? (хотя бы какой-нибудь, пусть даже более низкого качества, программный эмулятор) или способ полностью отключить эффекты, сохраняя градиент?
Панель инструментов активна в любой ОС (даже в ВМ), и когда я нажимаю на белую область в месте, где должна быть кнопка, она реагирует правильно (кнопка нажимается).