2012-08-02 12 views
6

Mam aplikację z dwoma oknami XAML/WPF (wyprowadzonymi z NavigationWindow), każde okno zawiera jedną nadrzędną kontrolkę UserControl, w której umieszczone są wszystkie elementy sterujące dla dzieci. W jednym z okien chciałbym pokazać zawartość drugiego okna (tak naprawdę tylko nadrzędny UserControl), w sposób podobny do telewizora z obrazem w obrazie. W ten sposób użytkownik może zobaczyć pierwsze okno i zobaczyć, co dzieje się w drugim oknie w tym samym czasie. Zauważ, że nie chcę dwóch niezależnych kopii tego UserControl drugiego okna (byłoby to łatwe), ale lustrzane odbicie zawartości drugiego okna w pierwszym oknie.Czy mogę powielić okno XAML/WPF do drugiego okna, na przykład telewizora z obrazem w obrazie?

Jest to trochę podobne do podglądu miniatur Windows 7 na pasku zadań, więc uważam, że musi być to wykonalne. Idealnie byłoby jednak móc wejść w interakcję z tym oknem w oknie, w ten sam sposób, w jaki robiłbym, gdybym podciągał oryginalne okno.

Jest to podobne do this question, z tym że chciałbym skopiować tylko jedno okno z tej samej aplikacji, zamiast całego pulpitu. Również podobna do this question, ale potrzebuję trochę więcej trzymania ręki, ponieważ nie jestem obeznany z C#/WPF. Niektóre fragmenty kodu byłyby świetne.

Z góry dziękuję!

+0

Możesz być w stanie "przejąć" zawartość drugiego okna i umieścić je w kontrolce "PiP". Kiedy PiP nie jest już potrzebny, ponownie dołącz zawartość do okna, jeśli to konieczne. –

Odpowiedz

0

Użyj pędzla wizualnego jako wypełnienia prostokąta.

Nie można jednak z nią współdziałać ... ale w ten sposób można uzyskać podgląd miniatur na pasku zadań.

<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> 

Aby wchodzić w interakcje, trzeba powiązać wszystkie właściwości z identycznym ekranem i użyć przekształcenia układu, aby go zmniejszyć.

<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> 
3

Użyj wizualnego pędzla. Nie będzie interaktywny, ale wydaje się, że pasuje do twoich potrzeb.

Wklej ten kod do Kaxaml, aby wyświetlić go w akcji.

<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> 
Powiązane problemy