2011-01-13 2 views
4

Я пытаюсь изменить цвет кнопки расширения Expander, и кажется, что единственный способ сделать это - изменить свой шаблон управления, поскольку для его установки нет свойства.Почему мой расширитель не расширяется, когда я устанавливаю его шаблон?

Итак, я использовал Show Me The Template, чтобы получить шаблон для темы Aero. Затем я установил этот шаблон на моем Expander, без каких-либо изменений. Это выглядит отлично, но нажатие на кнопку больше не приводит к ее расширению.

Может кто-нибудь объяснить, почему это происходит? Я ожидаю, что это что-то простое, но я все еще изучаю 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

Когда я редактирую копию Expander шаблона в Blend, который должен делать примерно то же самое, что вы делаете с ShowMeTheTemplate, то IsChecked свойство ToggleButton имени HeaderSite не False (как это в вашем XAML выше), но это выражение:

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

так тумблер состояние кнопки является оценка к элементу управления IsExpanded. Так вступает в действие кнопка переключения.

+0

Вы отправили на каждый вопрос, который я задал до сих пор! Это устранило проблему. Большое спасибо за ваше время и помощь. Возможно, я буду использовать Blend для этого в будущем. – Rich

Смежные вопросы