2011-01-13 7 views
4

Expander의 확장 버튼의 색상을 변경하려고하는데 설정하는 속성이 없기 때문에 확장 템플릿의 컨트롤 템플릿을 변경하는 것이 유일한 방법 인 것 같습니다.템플릿을 설정할 때 확장 기능이 확장되지 않는 이유는 무엇입니까?

그래서 저는 Show Me The Template을 사용하여 Aero 테마 용 템플릿을 가져 왔습니다. 그런 다음 내 확장자 에 해당 템플릿을 설정하고 다른 변경 사항은입니다. 괜찮아 보이지만 버튼을 클릭해도 더 이상 확장되지 않습니다.

아무도 왜 이런 일이 일어 났는지 설명 할 수 있습니까? 나는 그것이 간단 할 것이라고 기대하지만, WPF를 배우고 있고 그것을 이해할 수 없었다. 고맙습니다. 여기

는 전체 코드입니다 :

<Expander Header="Test"> 
    <Expander.Template> 
    <ControlTemplate TargetType="Expander" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
     <Border BorderThickness="{TemplateBinding Border.BorderThickness}" CornerRadius="3,3,3,3" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True"> 
     <DockPanel> 
      <ToggleButton IsChecked="False" Content="{TemplateBinding HeaderedContentControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" Foreground="{TemplateBinding TextElement.Foreground}" FontFamily="{TemplateBinding TextElement.FontFamily}" FontSize="{TemplateBinding TextElement.FontSize}" FontStretch="{TemplateBinding TextElement.FontStretch}" FontStyle="{TemplateBinding TextElement.FontStyle}" FontWeight="{TemplateBinding TextElement.FontWeight}" HorizontalContentAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding Control.VerticalContentAlignment}" Padding="{TemplateBinding Control.Padding}" Name="HeaderSite" MinWidth="0" MinHeight="0" Margin="1,1,1,1" DockPanel.Dock="Top"> 
      <ToggleButton.Style> 
       <Style TargetType="ToggleButton"> 
       <Style.Resources> 
        <ResourceDictionary /> 
       </Style.Resources> 
       <Setter Property="Control.Template"> 
        <Setter.Value> 
        <ControlTemplate TargetType="ToggleButton"> 
         <Border Padding="{TemplateBinding Control.Padding}"> 
         <Grid Background="#00FFFFFF" SnapsToDevicePixels="False"> 
          <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="19" /> 
          <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <Ellipse Stroke="#FFA9A9A9" Name="circle" Width="19" Height="19" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          <Path Data="M1,1.5L4.5,5 8,1.5" Stroke="#FF666666" StrokeThickness="2" Name="arrow" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="False" /> 
          <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="4,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" SnapsToDevicePixels="True" Grid.Column="1" /> 
         </Grid> 
         </Border> 
         <ControlTemplate.Triggers> 
         <Trigger Property="ToggleButton.IsChecked"> 
          <Setter TargetName="arrow" Property="Path.Data"> 
          <Setter.Value> 
           <StreamGeometry>M1,4.5L4.5,1 8,4.5</StreamGeometry> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="UIElement.IsMouseOver"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF3C7FB1</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF222222</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="ButtonBase.IsPressed"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF526C7B</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="circle" Property="Shape.StrokeThickness"> 
          <Setter.Value> 
           <s:Double>1.5</s:Double> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF003366</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </ToggleButton.Style> 
      <ToggleButton.FocusVisualStyle> 
       <Style TargetType="IFrameworkInputElement"> 
       <Style.Resources> 
        <ResourceDictionary /> 
       </Style.Resources> 
       <Setter Property="Control.Template"> 
        <Setter.Value> 
        <ControlTemplate> 
         <Border> 
         <Rectangle Stroke="#FF000000" StrokeThickness="1" StrokeDashArray="1 2" Margin="0,0,0,0" SnapsToDevicePixels="True" /> 
         </Border> 
        </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </ToggleButton.FocusVisualStyle> 
      </ToggleButton> 
      <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Name="ExpandSite" Margin="{TemplateBinding Control.Padding}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" Visibility="Collapsed" Focusable="False" DockPanel.Dock="Bottom" /> 
     </DockPanel> 
     </Border> 
     <ControlTemplate.Triggers> 
     <Trigger Property="Expander.IsExpanded"> 
      <Setter TargetName="ExpandSite" Property="UIElement.Visibility" Value="{x:Static Visibility.Visible}" /> 
      <Trigger.Value> 
      <s:Boolean>True</s:Boolean> 
      </Trigger.Value> 
     </Trigger> 
     <Trigger Property="Expander.ExpandDirection"> 
      <Setter TargetName="ExpandSite" Property="DockPanel.Dock" Value="{x:Static Dock.Right}" /> 
      <Setter TargetName="HeaderSite" Property="DockPanel.Dock" Value="{x:Static Dock.Left}" /> 
      <Setter TargetName="HeaderSite" Property="FrameworkElement.Style"> 
      <Setter.Value> 
       <Style TargetType="ToggleButton"> 
       <Style.Resources> 
        <ResourceDictionary /> 
       </Style.Resources> 
       <Setter Property="Control.Template"> 
        <Setter.Value> 
        <ControlTemplate TargetType="ToggleButton"> 
         <Border Padding="{TemplateBinding Control.Padding}"> 
         <Grid Background="#00FFFFFF" SnapsToDevicePixels="False"> 
          <Grid.RowDefinitions> 
          <RowDefinition Height="19" /> 
          <RowDefinition Height="*" /> 
          </Grid.RowDefinitions> 
          <Grid> 
          <Grid.LayoutTransform> 
           <TransformGroup> 
           <TransformGroup.Children> 
            <RotateTransform Angle="-90" /> 
           </TransformGroup.Children> 
           </TransformGroup> 
          </Grid.LayoutTransform> 
          <Ellipse Stroke="#FFA9A9A9" Name="circle" Width="19" Height="19" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          <Path Data="M1,1.5L4.5,5 8,1.5" Stroke="#FF666666" StrokeThickness="2" Name="arrow" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="False" /> 
          </Grid> 
          <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="0,4,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" SnapsToDevicePixels="True" Grid.Row="1" /> 
         </Grid> 
         </Border> 
         <ControlTemplate.Triggers> 
         <Trigger Property="ToggleButton.IsChecked"> 
          <Setter TargetName="arrow" Property="Path.Data"> 
          <Setter.Value> 
           <StreamGeometry>M1,4.5L4.5,1 8,4.5</StreamGeometry> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="UIElement.IsMouseOver"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF3C7FB1</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF222222</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="ButtonBase.IsPressed"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF526C7B</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="circle" Property="Shape.StrokeThickness"> 
          <Setter.Value> 
           <s:Double>1.5</s:Double> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF003366</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </Setter.Value> 
      </Setter> 
      <Trigger.Value> 
      <x:Static Member="ExpandDirection.Right" /> 
      </Trigger.Value> 
     </Trigger> 
     <Trigger Property="Expander.ExpandDirection"> 
      <Setter TargetName="ExpandSite" Property="DockPanel.Dock" Value="{x:Static Dock.Top}" /> 
      <Setter TargetName="HeaderSite" Property="DockPanel.Dock" Value="{x:Static Dock.Bottom}" /> 
      <Setter TargetName="HeaderSite" Property="FrameworkElement.Style"> 
      <Setter.Value> 
       <Style TargetType="ToggleButton"> 
       <Style.Resources> 
        <ResourceDictionary /> 
       </Style.Resources> 
       <Setter Property="Control.Template"> 
        <Setter.Value> 
        <ControlTemplate TargetType="ToggleButton"> 
         <Border Padding="{TemplateBinding Control.Padding}"> 
         <Grid Background="#00FFFFFF" SnapsToDevicePixels="False"> 
          <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="19" /> 
          <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <Grid> 
          <Grid.LayoutTransform> 
           <TransformGroup> 
           <TransformGroup.Children> 
            <RotateTransform Angle="180" /> 
           </TransformGroup.Children> 
           </TransformGroup> 
          </Grid.LayoutTransform> 
          <Ellipse Stroke="#FFA9A9A9" Name="circle" Width="19" Height="19" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          <Path Data="M1,1.5L4.5,5 8,1.5" Stroke="#FF666666" StrokeThickness="2" Name="arrow" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="False" /> 
          </Grid> 
          <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="4,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" SnapsToDevicePixels="True" Grid.Column="1" /> 
         </Grid> 
         </Border> 
         <ControlTemplate.Triggers> 
         <Trigger Property="ToggleButton.IsChecked"> 
          <Setter TargetName="arrow" Property="Path.Data"> 
          <Setter.Value> 
           <StreamGeometry>M1,4.5L4.5,1 8,4.5</StreamGeometry> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="UIElement.IsMouseOver"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF3C7FB1</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF222222</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="ButtonBase.IsPressed"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF526C7B</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="circle" Property="Shape.StrokeThickness"> 
          <Setter.Value> 
           <s:Double>1.5</s:Double> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF003366</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </Setter.Value> 
      </Setter> 
      <Trigger.Value> 
      <x:Static Member="ExpandDirection.Up" /> 
      </Trigger.Value> 
     </Trigger> 
     <Trigger Property="Expander.ExpandDirection"> 
      <Setter TargetName="ExpandSite" Property="DockPanel.Dock" Value="{x:Static Dock.Left}" /> 
      <Setter TargetName="HeaderSite" Property="DockPanel.Dock" Value="{x:Static Dock.Right}" /> 
      <Setter TargetName="HeaderSite" Property="FrameworkElement.Style"> 
      <Setter.Value> 
       <Style TargetType="ToggleButton"> 
       <Style.Resources> 
        <ResourceDictionary /> 
       </Style.Resources> 
       <Setter Property="Control.Template"> 
        <Setter.Value> 
        <ControlTemplate TargetType="ToggleButton"> 
         <Border Padding="{TemplateBinding Control.Padding}"> 
         <Grid Background="#00FFFFFF" SnapsToDevicePixels="False"> 
          <Grid.RowDefinitions> 
          <RowDefinition Height="19" /> 
          <RowDefinition Height="*" /> 
          </Grid.RowDefinitions> 
          <Grid> 
          <Grid.LayoutTransform> 
           <TransformGroup> 
           <TransformGroup.Children> 
            <RotateTransform Angle="90" /> 
           </TransformGroup.Children> 
           </TransformGroup> 
          </Grid.LayoutTransform> 
          <Ellipse Stroke="#FFA9A9A9" Name="circle" Width="19" Height="19" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          <Path Data="M1,1.5L4.5,5 8,1.5" Stroke="#FF666666" StrokeThickness="2" Name="arrow" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="False" /> 
          </Grid> 
          <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="0,4,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" SnapsToDevicePixels="True" Grid.Row="1" /> 
         </Grid> 
         </Border> 
         <ControlTemplate.Triggers> 
         <Trigger Property="ToggleButton.IsChecked"> 
          <Setter TargetName="arrow" Property="Path.Data"> 
          <Setter.Value> 
           <StreamGeometry>M1,4.5L4.5,1 8,4.5</StreamGeometry> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="UIElement.IsMouseOver"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF3C7FB1</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF222222</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         <Trigger Property="ButtonBase.IsPressed"> 
          <Setter TargetName="circle" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF526C7B</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="circle" Property="Shape.StrokeThickness"> 
          <Setter.Value> 
           <s:Double>1.5</s:Double> 
          </Setter.Value> 
          </Setter> 
          <Setter TargetName="arrow" Property="Shape.Stroke"> 
          <Setter.Value> 
           <SolidColorBrush>#FF003366</SolidColorBrush> 
          </Setter.Value> 
          </Setter> 
          <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
          </Trigger.Value> 
         </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </Setter.Value> 
      </Setter> 
      <Trigger.Value> 
      <x:Static Member="ExpandDirection.Left" /> 
      </Trigger.Value> 
     </Trigger> 
     <Trigger Property="UIElement.IsEnabled"> 
      <Setter Property="TextElement.Foreground"> 
      <Setter.Value> 
       <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" /> 
      </Setter.Value> 
      </Setter> 
      <Trigger.Value> 
      <s:Boolean>False</s:Boolean> 
      </Trigger.Value> 
     </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
    </Expander.Template> 
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
</Expander> 

답변

3

난 당신이 ShowMeTheTemplate로 수행하는과 거의 같은 일을해야 혼합의 Expander 템플릿의 사본을 편집라는 ToggleButtonIsChecked 특성

IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 

그래서 버튼의 토글 상태가 바인딩 : (이것은 위의 XAML에서와 같이)하지만이 표현 HeaderSiteFalse 아니다 컨트롤의 IsExpanded 속성으로 이것이 토글 버튼이 적용되는 방식입니다.

+0

내가 지금까지 질문 한 모든 질문에 게시했습니다. 이로 인해 문제가 해결되었습니다. 시간과 도움을 많이 주셔서 감사합니다. 아마도 앞으로 Blend를 사용해야 할 것입니다. – Rich