6

2 つの XAML/WPF ウィンドウ (NavigationWindow から派生) を持つアプリケーションがあります。各ウィンドウには、すべての子コントロールが配置される 1 つの親 UserControl が含まれています。ウィンドウの 1 つで、2 番目のウィンドウのコンテンツ (実際には親 UserControl のみ) を、ピクチャー イン ピクチャー TV のような方法で表示したいと考えています。このようにして、ユーザーは最初のウィンドウを表示し、同時に 2 番目のウィンドウで何が起こっているかを確認できます。この 2 番目のウィンドウの UserControl の 2 つの独立したコピーは必要なく (簡単です)、2 番目のウィンドウの内容を最初のウィンドウにミラーリングすることに注意してください。

これは、Windows 7 のタスクバーのサムネイル プレビューと漠然と似ているため、実行可能である必要があると思います。ただし、理想的には、元のウィンドウをプルアップする場合と同じように、ウィンドウ内のウィンドウと対話できるようにしたいと考えています。

これはこの質問と似ていますが、デスクトップ全体ではなく、同じアプリケーションから 1 つのウィンドウだけをコピーしたいという点が異なります。this questionにも似ていますが、C#/WPF に精通していないため、もう少し手がかりが必要です。いくつかのコード スニペットはすばらしいでしょう。

前もって感謝します!

4

2 に答える 2

3

ビジュアル ブラシを使用します。インタラクティブではありませんが、ニーズに合っているようです。

このコードをKaxamlに貼り付けて、動作を確認します。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Page.Triggers>
        <EventTrigger RoutedEvent="Page.Loaded">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard Storyboard.TargetName="sampleAnimation" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(RotateTransform.Angle)">
                        <DoubleAnimation Duration="00:00:10" RepeatBehavior="Forever" To="-360">
                            <DoubleAnimation.EasingFunction>
                                <ElasticEase/>
                            </DoubleAnimation.EasingFunction>
                        </DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Page.Triggers>
    <Page.Resources>
        <VisualBrush x:Key="contentBrush" Stretch="None" Visual="{Binding ElementName=content}"/>
    </Page.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock FontSize="25" Text="Content to mirror:"/>
        <Grid
            x:Name="content"
            Grid.Row="1"
            Margin="5"
            Background="#11000000"
            ClipToBounds="True">
            <TextBox
                x:Name="sampleAnimation"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                FontSize="60"
                FontWeight="Light"
                Foreground="Red"
                RenderTransformOrigin="0.5,0.5"
                Text="Hello!">
                <TextBox.RenderTransform>
                    <RotateTransform Angle="0"/>
                </TextBox.RenderTransform>
            </TextBox>
        </Grid>
        <TextBlock Grid.Row="2" FontSize="25" Text="Mirrored content using VisualBrush:"/>
        <Grid Grid.Row="3" Background="{StaticResource contentBrush}">
        </Grid>
    </Grid>
</Page>
于 2012-08-02T17:21:45.160 に答える
0

ビジュアル ブラシを四角形の塗りつぶしとして使用します。

ただし、それを操作することはできません... しかし、これがタスクバーのプレビュー サムネイルを実現する方法です。

<Grid HorizontalAlignment="Left" Name="A" Height="100" Width="100">
    <Grid.Background>
        <SolidColorBrush Opacity="0" Color="White"/>
    </Grid.Background>
    <!-- Contents -->
</Grid>


<Rectangle Name="RA" VerticalAlignment="Top" Width="100" Height="100" HorizontalAlignment="Left" Stroke="Black">
    <Rectangle.Fill>
        <!-- Creates the reflection. -->
        <VisualBrush  AutoLayoutContent="True"  Visual="{Binding ElementName=A}" ViewboxUnits="RelativeToBoundingBox" ViewportUnits="RelativeToBoundingBox" Stretch="Fill" AlignmentX="Left" AlignmentY="Top" Viewport="0,0,1,1" Viewbox="0,0,1,1" TileMode="None">
        </VisualBrush>
    </Rectangle.Fill>
</Rectangle>

対話するには、すべてのプロパティを同一の画面にバインドし、レイアウト変換を使用して縮小する必要があります。

<StackPanel>
    <Grid>
        <TextBox Name="A"/>
    </Grid>
    <Grid>
        <Grid.LayoutTransform>
            <ScaleTransform CenterX=".5" CenterY=".5"  ScaleX=".25" ScaleY=".25"/>
        </Grid.LayoutTransform>
        <TextBox Name="B" Text="{Binding ElementName=A, Path=Text, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
</StackPanel>
于 2012-08-02T17:00:08.447 に答える