2014-10-29 2 views
0

Set Template 속성을 사용하여 Window 유형의 스타일을 만들었습니다. 윈도우의 Height와 Width 속성을 설정하면 잘 동작합니다. 그러나 SizeToContent = "WidthAndHeight"를 설정하려고 시도했을 때 창 높이와 너비는 전체 높이와 너비를 표시하도록 설정되었습니다 (창의 모든 내용이 높이와 너비에 의해 제한 되더라도). 컨트롤 템플릿에서 SizeToContent를 처리 할 수 ​​있습니까? 그것은 당신이 겪고있는 문제처럼 보인다WPF Window ControlTemplate : SizeToContent 처리 방법

<Style x:Key="WindowStyle" TargetType="{x:Type Window}"> 
    <Setter Property="AllowsTransparency" Value="true" /> 
    <Setter Property="WindowStyle" Value="None" /> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="ResizeMode" Value="CanResizeWithGrip" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Window}"> 
       <Grid 
        Margin="7" 
        TextOptions.TextRenderingMode="ClearType" 
        TextOptions.TextFormattingMode="Display" 
        Background="Transparent"> 
        <Border 
         x:Name="PART_Border" 
         Width="Auto" 
         Height="Auto" 
         Background="#EFEFF2" 
         BorderBrush="{StaticResource AppBrush}" 
         BorderThickness="1" 
         Padding="0" 
         CornerRadius="5"> 
         <Border.Effect> 
          <DropShadowEffect 
           Color="black" 
           Opacity="0.5" 
           BlurRadius="7" 
           ShadowDepth="2" 
           Direction="315"/> 
         </Border.Effect> 
         <DockPanel 
          HorizontalAlignment="Stretch" 
          Background="Transparent" 
          VerticalAlignment="Stretch" 
          > 
          <Border 
           x:Name="TitleBar" 
           DockPanel.Dock="Top" 
           Background="#EFEFF2" 
           BorderThickness="0" 
           MouseLeftButtonDown="TitleBarMouseLeftButtonDown" 
           MouseMove="TitleBarMouseMove" 
           CornerRadius="5,5,0,0" 
           > 
           <Grid Height="35"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="36"/> 
             <ColumnDefinition /> 
             <ColumnDefinition Width="26"/> 
             <ColumnDefinition Width="26"/> 
             <ColumnDefinition Width="26"/> 
             <ColumnDefinition Width="25"/> 
            </Grid.ColumnDefinitions> 
            <Image 
             x:Name="Icon" 
             Grid.Column="0" 
             Source="{Binding Path=Icon, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" 
             HorizontalAlignment="Right" 
             Margin="4,-7,0,7" 
             Width="32" 
             Height="32" 
             MouseLeftButtonDown="IconMouseLeftButtonDown" 
             /> 
            <Label 
              Grid.Column="1" 
              VerticalAlignment="Center" 
              Content="{Binding Path=Title, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" FontFamily="FuturaDemiC" FontSize="18"> 
            </Label> 
            <Button x:Name="MinButton" 
              Grid.Column="2" 
              Width="20" 
              Height="20" 
              Style="{StaticResource ImageButton}" 
              Click="MinButtonClick"             
             > 
             <Image Source="{StaticResource App_Minimize}"/> 
            </Button> 
            <Button x:Name="MaxButton"             
              Grid.Column="3" 
              Width="20" 
              Height="20" 
              Style="{StaticResource ImageButton}" 
              Click="MaxButtonClick" 

             > 
             <Image Name="MaxButtonImage" 
               Source="{StaticResource App_Maximize}" /> 
            </Button> 
            <Button x:Name="CloseButton" 
              Grid.Column="4" 
              Width="20" 
              Height="20" 
              Style="{StaticResource ImageButton}" 
              Click="CloseButtonClick" 

             > 
             <Image Source="{StaticResource App_Close}" /> 
            </Button> 
           </Grid> 
          </Border> 
          <ContentPresenter /> 
         </DockPanel> 
        </Border> 
        <Line 
         MouseDown="OnSizeNorth" 
         x:Name="lnSizeNorth" 
         Stroke="Transparent" 
         Cursor="SizeNS" 
         X1="1" X2="{TemplateBinding ActualWidth}" Y1="1" Y2="1" 
         StrokeThickness="3" 
         /> 
        <Line 
         MouseDown="OnSizeSouth" 
         x:Name="lnSizeSouth" 
         Stroke="Transparent" 
         VerticalAlignment="Bottom" 
         Cursor="SizeNS" 
         X1="1" X2="{TemplateBinding ActualWidth}" Y1="{TemplateBinding ActualHeight}" Y2="{TemplateBinding ActualHeight}" 
         StrokeThickness="3" 
         /> 
        <Line 
         MouseDown="OnSizeWest" 
         x:Name="lnSizeWest" 
         Stroke="Transparent" 
         Cursor="SizeWE" 
         X1="1" X2="1" Y1="1" Y2="{TemplateBinding ActualHeight}" 
         StrokeThickness="3" 
         /> 
        <Line 
         MouseDown="OnSizeEast" 
         x:Name="lnSizeEast" 
         Stroke="Transparent" 
         HorizontalAlignment="Right" 
         Cursor="SizeWE" 
         X1="{TemplateBinding ActualWidth}" X2="{TemplateBinding ActualWidth}" Y1="1" Y2="{TemplateBinding ActualHeight}" 
         StrokeThickness="3" 
         /> 
        <Rectangle MouseDown="OnSizeNorthWest" x:Name="rectSizeNorthWest" Cursor="SizeNWSE" Fill="Transparent" Width="5" Height="5" VerticalAlignment="Top" HorizontalAlignment="Left" /> 
        <Rectangle MouseDown="OnSizeNorthEast" x:Name="rectSizeNorthEast" Cursor="SizeNESW" Fill="Transparent" Width="5" Height="5" VerticalAlignment="Top" HorizontalAlignment="Right" /> 
        <Rectangle MouseDown="OnSizeSouthWest" x:Name="rectSizeSouthWest" Cursor="SizeNESW" Fill="Transparent" Width="5" Height="5" VerticalAlignment="Bottom" HorizontalAlignment="Left" /> 
        <Rectangle MouseDown="OnSizeSouthEast" x:Name="rectSizeSouthEast" Cursor="SizeNWSE" Fill="Transparent" Width="5" Height="5" VerticalAlignment="Bottom" HorizontalAlignment="Right" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="WindowState" Value="Maximized"> 
         <Setter TargetName="MaxButtonImage" Property="Source" Value="{StaticResource App_Maximize}"/> 
        </Trigger> 
        <Trigger Property="IsActive" Value="False"> 
         <Setter TargetName="PART_Border" Property="BorderBrush" Value="{StaticResource WindowBorderBrushInactive}"/> 
        </Trigger> 
        <Trigger Property="ResizeMode" Value="NoResize"> 
         <Setter TargetName="MinButton" Property="Visibility" Value="Hidden"/> 
         <Setter TargetName="MaxButton" Property="Visibility" Value="Hidden"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Resources> 
     <Style TargetType="{x:Type StatusBar}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsActive, RelativeSource={RelativeSource AncestorType=Window}}" Value="True"> 
        <Setter Property="Foreground" Value="{StaticResource WindowStatusForeground}" /> 
        <Setter Property="Background" Value="{StaticResource WindowBorderBrush}" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsActive, RelativeSource={RelativeSource AncestorType=Window}}" Value="False"> 
        <Setter Property="Foreground" Value="{StaticResource WindowStatusForegroundInactive}" /> 
        <Setter Property="Background" Value="{StaticResource WindowBorderBrushInactive}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Style.Resources> 
</Style> 

답변

1

는 최대 사용 가능한 공간을 복용되도록의 내용은이에 폭을 설정 나를 위해, 크기가 없다는 것입니다 : 여기

창 스타일이다 내 두 스크린의 결합 된 너비.

기본적으로 "필요한 콘텐츠만큼 가져갈 것"이라는 내용의 대화 상자가 표시되며 콘텐츠는 "나에게 줄 때까지 나에게 줄 창을 부여 할 것"이라고 말하므로 창은 단지 다 가져가.

편집 : 사실, 포함 그리드의 여백을 제거한 다음 ActualHeight/Width 바인딩으로 줄을 제거하면 문제가 해결됩니다. 템플리트의이 두 가지 측면은 최대 크기에 도달 할 때까지 크기를 밀어내는 것입니다.

+0

저는 바인딩없이 직사각형으로 라인을 대체했으며 작동합니다! 고마워요! – VMaleev