2017-11-12 13 views
0

Windows에 사용되는 controltemplate을 정의한 다음 기본적으로 동일한 뷰를 갖습니다.

그 후에 다른 컨트롤을 다른 창에 추가해야합니다. 그리고 나는 그림을 좋아하는 컨트롤의 다른 부분을 잡기 위해 controltemplate에 요소의 호스트를 추가하는 방법을 모른다.

그리고 다른 방법, 컨트롤에 액세스하는 방법 및 다른 창의 controltemplate에서 버튼의 동작을 설정하는 방법? 그것을 할 windowBase 클래스를 사용해야합니다?wpf controltemplate이 창에 적용되고 컨트롤을 추가하는 방법

제 국지적 화면 화상 enter image description here

상기 제어 템플릿 파일


<ImageSource x:Key="BtnCloseNormal">../images/others/popup_btn_reduction_normal.png</ImageSource> 
<ImageSource x:Key="BtnCloseMouseOver">../images/others/popup_btn_reduction_mouseover.png</ImageSource> 
<ImageSource x:Key="BtnClosePressed">../images/others/popup_btn_reduction_selected.png</ImageSource> 


<Style x:Key="StatedButtonStyle" TargetType="{x:Type c:StatedButton}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type c:StatedButton}" > 
       <Grid> 
        <Border> 
         <Image x:Name ="btnImg" Source="{Binding NormalBackground ,RelativeSource={RelativeSource TemplatedParent}}" Stretch="Fill"/> 
        </Border> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="btnImg" Property="Source" Value="{Binding MouseOverBackground ,RelativeSource={RelativeSource TemplatedParent}}"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter TargetName="btnImg" Property="Source" Value="{Binding PressedBackground ,RelativeSource={RelativeSource TemplatedParent}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 


<Style x:Key="WindowBaseStyle" TargetType="{x:Type Window}"> 
    <Setter Property="Background" Value="{x:Null}"></Setter> 
    <Setter Property="AllowsTransparency" Value="True"></Setter> 
    <Setter Property="WindowStyle" Value="None"></Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Window}"> 
       <Grid Background="{x:Null}"> 
        <Border CornerRadius="10" Background="White" Margin="20"> 
         <Border.Effect> 
          <DropShadowEffect BlurRadius="10" Color="Black" Direction="270" ShadowDepth="5" RenderingBias="Quality" Opacity="0.6"></DropShadowEffect> 
         </Border.Effect> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="40"/> 
           <RowDefinition Height="10"/> 
           <RowDefinition/> 
           <RowDefinition Height="40"/> 
           <RowDefinition Height="20"/> 
          </Grid.RowDefinitions> 
          <Grid Grid.Row="0"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="2*"/> 
            <ColumnDefinition Width="*"/> 
            <ColumnDefinition Width="40"/> 
            <ColumnDefinition Width="40"/> 
            <ColumnDefinition Width="60"/> 
           </Grid.ColumnDefinitions> 
           <Label x:Name="lblTitle" Grid.Column="0" Margin="20,6,0,0" FontSize="18" FontWeight="Bold" 
             Content="{TemplateBinding Title}"> 
           </Label> 
           <c:StatedButton Grid.Column="2" Width="30" Height="30" Style="{StaticResource StatedButtonStyle}" 
                NormalBackground="{StaticResource BtnCloseNormal}" 
                MouseOverBackground="{DynamicResource BtnCloseMouseOver}" 
                PressedBackground="{StaticResource BtnClosePressed}"/> 
           <c:StatedButton Grid.Column="3" Width="30" Height="30" Style="{StaticResource StatedButtonStyle}" 
                NormalBackground="{StaticResource BtnCloseNormal}" 
                MouseOverBackground="{DynamicResource BtnCloseMouseOver}" 
                PressedBackground="{StaticResource BtnClosePressed}"/> 
           <c:StatedButton Grid.Column="4" Width="30" Height="30" Style="{StaticResource StatedButtonStyle}" 
                NormalBackground="{StaticResource BtnCloseNormal}" 
                MouseOverBackground="{DynamicResource BtnCloseMouseOver}" 
                PressedBackground="{StaticResource BtnClosePressed}"/> 
          </Grid> 
          <Separator Background="LightGray" Grid.Row="1" Height="2"></Separator> 
          <Grid Grid.Row="2"> 
           <!--some controls will be insert here--> 
          </Grid> 
          <Grid Grid.Row="3" Background="Red" > 
           <!--some controls will be insert here--> 
           <ContentControl Content="{Binding }"></ContentControl> 
          </Grid> 
         </Grid> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

및 window.xaml


012,314,

답변

0

나는 직접했습니다. 은 새로운 컨트롤

<AdornerDecorator> 
    <contentpresenter/> 
</AdornerDecorator> 

를 호스팅하고 새 창의 부모 클래스로 windowBase을 만들 울부 짖는 코드를 사용합니다.