Создание отражения WindowsFormHost в wpf - PullRequest
3 голосов
/ 10 января 2010

Я очень новичок в WPF и немного застрял.

Я пытаюсь создать демонстрационную программу, которая отображает несколько встроенных приложений Win Form. Я хотел бы добавить отражение формы, но большинство существующих учебных пособий, которые я видел для отражений изображений, не работают.

Если кто-нибудь может указать мне правильное направление, я был бы очень признателен.

Вот соответствующий XAML - элемент управления формой добавляется в панель стека embedForm динамически.

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Border Name="inkBorder" Grid.Row="0" VerticalAlignment="Bottom" Margin="20"
            Width="400" Height="500" CornerRadius="5" BorderThickness="4">
                <Border.BorderBrush>
                    <LinearGradientBrush SpreadMethod="Reflect" StartPoint="0,0" EndPoint="0.5,0.5">
                        <LinearGradientBrush.GradientStops>
                            <GradientStop Color="Gray" Offset="0" />
                            <GradientStop Color="#eeeeee" Offset="1" />
                        </LinearGradientBrush.GradientStops>
                    </LinearGradientBrush>
                </Border.BorderBrush>
            <StackPanel Name="EmbedForm" Height="100" Width="400" ></StackPanel>
        </Border>

            <Rectangle Grid.Row="1" VerticalAlignment="Top"
               Width="{Binding ElementName=inkBorder,Path=ActualWidth}"
               Height="{Binding ElementName=inkBorder,Path=ActualHeight}">

                <Rectangle.OpacityMask>
                    <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                        <LinearGradientBrush.GradientStops>
                            <GradientStop Offset="0.0" Color="#66000000" />
                            <GradientStop Offset="1.0" Color="#00000000" />
                        </LinearGradientBrush.GradientStops>
                    </LinearGradientBrush>
                </Rectangle.OpacityMask>
                <Rectangle.Fill>
                    <VisualBrush 
          Visual="{Binding ElementName=inkBorder}">
                        <VisualBrush.RelativeTransform>
                            <TransformGroup>
                                <ScaleTransform ScaleX="1" ScaleY="-1" />
                                <TranslateTransform Y="1" />
                            </TransformGroup>
                        </VisualBrush.RelativeTransform>
                    </VisualBrush>
                </Rectangle.Fill>
            </Rectangle>
        </Grid>

Чтобы прояснить вопрос немного ...

В основном я ищу способ применить любые визуальные преобразования к элементам управления, таким как WindowsFormHost и WebBrowser.

Я обнаружил, что даже простые преобразования не работают с ними, и мне было интересно, есть ли какая-то хитрость в обращении с ними как со стандартными визуальными элементами или это безнадежная причина.

1 Ответ

3 голосов
/ 10 января 2010

Преобразования на WindowsFormsHost или WebBrowser не будут работать, потому что эти элементы управления не используют механизм рендеринга WPF, они используют GDI +.

Насколько я знаю, единственный способ достичь желаемого - захватить содержимое элемента управления в виде изображения и вручную выполнить преобразование изображения с помощью функций GDI + ... Это довольно легко для простого отражения, но это может быть сложно для других видов трансформации ...

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