2014-06-11 60 views
0

我想添加一个扩展如下所示:WPF扩展与头顶部

HeaderExpander

|> {部件1,element2的,元素3}

但是它创建了一个(我想要的在文本下扩展按钮):

enter image description here

XAML:

  <Expander Grid.Row="3" 
        Header="Wechselkonto: " 
        ExpandDirection="Right" 
        FlowDirection="LeftToRight"> 
       <StackPanel 
          Grid.ColumnSpan="2" 
          Orientation="Horizontal"> 

       <!--some buttons--> 
       ..... 

我发现默认的模板,但我不认为改变风格的正确方法:

<Style x:Key="ExpanderRightHeaderStyleCustom" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border Padding="{TemplateBinding Padding}"> 
        <Grid Background="Red" SnapsToDevicePixels="False"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="19"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <Button Grid.Row="0" /> 
         <Grid Grid.Row="1"> 
          <Grid.LayoutTransform> 
           <TransformGroup> 
            <TransformGroup.Children> 
             <TransformCollection> 
              <RotateTransform Angle="-90"/> 
             </TransformCollection> 
            </TransformGroup.Children> 
           </TransformGroup> 
          </Grid.LayoutTransform> 
          <Ellipse Grid.Row="0" 
            x:Name="circle" 
            HorizontalAlignment="Center" 
            Height="19" 
            Stroke="DarkGray" 
            VerticalAlignment="Center" 
            Width="19"/> 
          <Path Grid.Row="0" 
            x:Name="arrow" 
            Data="M 1,1.5 L 4.5,5 L 8,1.5" 
            HorizontalAlignment="Center" 
            SnapsToDevicePixels="false" 
            Stroke="#666" 
            StrokeThickness="2" 
            VerticalAlignment="Center"/> 
         </Grid> 
         <ContentPresenter HorizontalAlignment="Left" 
              Margin="0,4,0,0" 
              Grid.Row="1" 
              RecognizesAccessKey="True" 
              SnapsToDevicePixels="True" 
              VerticalAlignment="Bottom"/> 
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="true"> 
         <Setter Property="Data" TargetName="arrow" Value="M 1,4.5 L 4.5,1 L 8,4.5"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter Property="Stroke" TargetName="circle" Value="#FF3C7FB1"/> 
         <Setter Property="Stroke" TargetName="arrow" Value="#222"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter Property="Stroke" TargetName="circle" Value="#FF526C7B"/> 
         <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/> 
         <Setter Property="Stroke" TargetName="arrow" Value="#FF003366"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

您可以根据[默认一个](http://msdn.microsoft.com/en-us/library/ms753296.aspx)制作自定义模板,然后放置这些元素,只要您喜欢。 – icebat

+0

http://blogs.msdn.com/b/pigscanfly/archive/2010/03/28/wpf-styling-the-expander-control.aspx –

+0

尝试用单词来描述你的要求和你的问题。 – Sheridan

回答

2

好的,我发现了解决方案:

只要编辑Grid.Row =包含椭圆和路径元素网格的“1”,并设置Grid.Row =“0”中的ContentPresenter元件

<Style x:Key="ExpanderRightHeaderStyleCustom2" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border Padding="{TemplateBinding Padding}"> 
        <Grid Background="Transparent" SnapsToDevicePixels="False"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="Auto"/> 
         </Grid.RowDefinitions> 
         <Grid Grid.Row="1"> 
          <Grid.LayoutTransform> 
           <TransformGroup> 
            <TransformGroup.Children> 
             <TransformCollection> 
              <RotateTransform Angle="-90"/> 
             </TransformCollection> 
            </TransformGroup.Children> 
           </TransformGroup> 
          </Grid.LayoutTransform> 
          <Ellipse x:Name="circle" 
            HorizontalAlignment="Center" 
            Height="19" 
            Stroke="DarkGray" 
            VerticalAlignment="Center" 
            Width="19"/> 
          <Path x:Name="arrow" 
            Data="M 1,1.5 L 4.5,5 L 8,1.5" 
            HorizontalAlignment="Center" 
            SnapsToDevicePixels="false" 
            Stroke="#666" 
            StrokeThickness="2" 
            VerticalAlignment="Center"/> 
         </Grid> 
         <ContentPresenter HorizontalAlignment="Center" 
              Margin="0,4,0,0" 
              Grid.Row="0" 
              RecognizesAccessKey="True" 
              SnapsToDevicePixels="True" 
              VerticalAlignment="Top"/> 
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="true"> 
         <Setter Property="Data" TargetName="arrow" Value="M 1,4.5 L 4.5,1 L 8,4.5"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter Property="Stroke" TargetName="circle" Value="#FF3C7FB1"/> 
         <Setter Property="Stroke" TargetName="arrow" Value="#222"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter Property="Stroke" TargetName="circle" Value="#FF526C7B"/> 
         <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/> 
         <Setter Property="Stroke" TargetName="arrow" Value="#FF003366"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
1

展开控件模板(上MDSN here可用)定义了2行的网格。 一个用于扩展器按钮,另一个用于内容。

<RowDefinition Height="Auto" /> 
<RowDefinition x:Name="ContentRow" Height="0" /> 

您应该能够创建一个新的风格,在那里你交换这些行的模板,无论是在声明中并在两个边界设置Grid.Row属性。

+0

我想编辑默认,因为网站上的控件模板,你说它已被修改,但无法弄清楚如何解决问题。 – blfuentes