Эффекты рендеринга WPF - PullRequest
       12

Эффекты рендеринга WPF

0 голосов
/ 26 февраля 2010

Я создаю приложение 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

Затем я хотел протестировать программное обеспечение под Windows XP, Vista и 7 в 32- и 64-разрядных версиях, так как оно использует аппаратное обеспечение, и я хотел убедиться, что мои драйверы устройств работают хорошо и в других системах. Они делают. Но проблема в том, что когда я создал новую виртуальную машину в VMware (6.5) и запустил приложение, панель инструментов выглядела так:

Windows 7 (x86):

alt text

Windows XP (x86):

alt text

Хорошо, я понимаю, что WPF использует аппаратно-ускоренные эффекты WPF по причинам производительности, и у моего VMware нет оборудования, которое могло бы поддерживать пиксельные шейдеры, поэтому у моего клиента может быть машина, у которой нет пикселя. шейдер с поддержкой видеокарты. Я не могу позволить себе добавить такое аппаратное требование для моего программного обеспечения.

Но не должен ли WPF проверять, поддерживает ли гостевая ОС такие эффекты, и использовать альтернативные программные эффекты рендеринга?

Есть ли решение для того, чтобы оно выглядело одинаково на всех платформах? (хотя бы какой-нибудь, пусть даже более низкого качества, программный эмулятор) или способ полностью отключить эффекты, сохраняя градиент?

Панель инструментов активна в любой ОС (даже в ВМ), и когда я нажимаю на белую область в месте, где должна быть кнопка, она реагирует правильно (кнопка нажимается).

1 Ответ

1 голос
/ 26 февраля 2010

VMWare имеет известные ошибки с WPF - некоторые из них исправлены в WPF4, но в целом вам следует отключить ускорение WPF HW в VMware: http://blog.paulbetts.org/index.php/2010/01/10/expression-blend-glitches-in-vmware-parallels показывает, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...