2016-10-05 175 views
0

我正在嘗試製作自定義窗口樣式。目標是創建一個模板,在我的應用程序的每個窗口中使用migth。模板包含工具欄,標題和「將被窗口使用的區域」。問題是:當我使用我的風格時,我不能再添加網格和控制。自定義WPF窗口樣式

的App.xaml

<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}"> 
    <Setter Property="WindowStyle" Value="None"/> 
    <Setter Property="AllowsTransparency" Value="True"/> 
    <Setter Property="ResizeMode" Value="NoResize"/> 
    <Setter Property="Background" Value="MintCream"/> 
    <Setter Property="BorderBrush" Value="#0046E7"/> 
    <Setter Property="BorderThickness" Value="2"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Window}"> 
     <Grid Background="{TemplateBinding Background}"> 
      <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <StackPanel Grid.ColumnSpan="2"> 
      <TextBlock TextAlignment="Center" 
         Margin="0 10 0 0" 
         FontSize="22" 
         FontWeight="DemiBold" 
         Foreground="RoyalBlue" 
         Text="{TemplateBinding Title}"/> 
      </StackPanel> 
      <StackPanel Grid.Row="0" Grid.Column="1" 
         Orientation="Horizontal" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Center" 
         Margin="0 10 15 0"> 
      <Button Style="{StaticResource MinimizeButtonStyle}" 
        Width="25" 
        Height="22" 
        Margin="0 0 10 0"/> 
      <Button Style="{StaticResource CloseButtonStyle}" 
        Width="25" 
        Height="22"/> 
      </StackPanel> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

MainWindow.xaml

<Window x:Class="WindowForHW2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WindowForHW2" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" 
    Style="{StaticResource CustomWindowStyle}"> 
<Grid> 
    <Button Width="100" Height="40" Content="Hello"/> 
</Grid> 

模板工程,但我不能再添加不便: Window:

回答

4

您需要添加一個ContentPresenterContent你的Window去。嘗試這個。

<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}"> 
    <Setter Property="WindowStyle" Value="None"/> 
    <Setter Property="AllowsTransparency" Value="True"/> 
    <Setter Property="ResizeMode" Value="NoResize"/> 
    <Setter Property="Background" Value="MintCream"/> 
    <Setter Property="BorderBrush" Value="#0046E7"/> 
    <Setter Property="BorderThickness" Value="2"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Window}"> 
     <Grid Background="{TemplateBinding Background}"> 
      <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <StackPanel Grid.ColumnSpan="2"> 
      <TextBlock TextAlignment="Center" 
         Margin="0 10 0 0" 
         FontSize="22" 
         FontWeight="DemiBold" 
         Foreground="RoyalBlue" 
         Text="{TemplateBinding Title}"/> 
      </StackPanel> 
      <StackPanel Grid.Row="0" Grid.Column="1" 
         Orientation="Horizontal" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Center" 
         Margin="0 10 15 0"> 
      <Button Content="+" 
        Width="25" 
        Height="22" 
        Margin="0 0 10 0"/> 
      <Button Content="X" 
        Width="25" 
        Height="22" /> 
      </StackPanel> 
     <!-- here goes the content --> 
     <ContentPresenter Grid.Row="1"/> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+1

它的工作原理!我愛你。謝謝 – CepBuch