2009-02-19 15 views
5

Wie würde ich ein gemeinsames Fenster Aussehen in WPF erstellen? Ich spreche nicht nur über das Styling des Fensters, ich meine ein Fenster mit einem Rahmen, einem Gitter und einigen anderen Dingen.Erstellen eines gemeinsamen Fensters in WPF

Danke.

+0

können Sie ein bisschen mehr erklären .. Sie wollen ein Fenster mit vordefinierten Inhalt ... wie Masterseiten in ASP? Oder bin ich auf dem Holzweg? – Gishu

Antwort

0

Was ich getan habe, war das Erstellen einer Basisklasse, die den UI-Code, den ich wollte, in jedem Fenster erstellt hat. Dadurch kann ich Ereignisse für Steuerelemente festlegen und die Ereignissubskription in der Basisklasse haben. Wenn es einen besseren Weg gibt, das zu tun, wie zum Beispiel Xaml, würde ich es gerne wissen.

5

Sie können ein ControlTemplate für das Fenster erstellen. Hier ist ein ziemlich einfaches Beispiel mit einigen Steuerelementen und Triggern. Sie können problemlos weitere Elemente hinzufügen, um Ihre Anforderungen zu erfüllen.

<ControlTemplate x:Key="MyWindowTemplate" TargetType="{x:Type Window}"> 
     <Border x:Name="WindowBorder" Style="{DynamicResource WindowBorderStyle}"> 
     <Grid> 
      <Border Margin="4,4,4,4" Padding="0,0,0,0" x:Name="MarginBorder"> 
       <AdornerDecorator> 
        <ContentPresenter/> 
       </AdornerDecorator> 
      </Border> 
      <ResizeGrip Visibility="Collapsed" IsTabStop="false" HorizontalAlignment="Right" x:Name="WindowResizeGrip" 
        VerticalAlignment="Bottom" /> 
     </Grid> 
     </Border> 
     <ControlTemplate.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="ResizeMode" Value="CanResizeWithGrip"/> 
       <Condition Property="WindowState" Value="Normal"/> 
      </MultiTrigger.Conditions> 
      <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/> 
      <Setter Property="Margin" TargetName="MarginBorder" Value="4,4,4,20" /> 
     </MultiTrigger> 
     <Trigger Property="WindowState" Value="Maximized"> 
      <Setter Property="CornerRadius" TargetName="WindowBorder" Value="0,0,0,0"/> 
     </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

Sie können diese Control verwenden, indem Sie die Vorlage Eigenschaft des Window-Einstellung:

Template="{StaticResource MyWindowTemplate}" 

Sie wollen dies mit einem Stil, wie dies in Verbindung verwenden:

<Style x:Key="MyWindowStyle" TargetType="{x:Type Window}"> 
     <Setter Property="AllowsTransparency" Value="False" /> 
     <Setter Property="WindowStyle" Value="SingleBorderWindow" /> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="ShowInTaskbar" Value="False" /> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Window}"> 
       <Border> 
        <AdornerDecorator> 
        <ContentPresenter/> 
        </AdornerDecorator> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 

Und Stellen Sie den Stil auf Ihrem Fenster wie folgt ein:

Style="{StaticResource MyWindowStyle}" 
+0

Das funktioniert super. Das einzige Problem, das ich jetzt habe, ist, dass ich einige Ereignisse im ControlTemplate-Code habe. Wenn ich möchte, dass alle Fenster die Vorlage verwenden, muss ich die Ressource in eine andere Datei einfügen. Wenn ich das mache, funktionieren die Ereignisse nicht mehr. –

Verwandte Themen