English 中文(简体)
试图轮换一个模版的格里德
原标题:Trying to rotate a Grid that s in a template

我想制造一个 expand子的扩张器,在4条方向上扩大。 如同扩大者坐在网页顶端一样,它会扩大一条下点的arrow子的轮换度为180度。 既然扩大者坐在页左边,它就应当扩大。 但是,我的arrow子应当正确指出,因此,用户知道,它必须点击扩张者,以扩大这一权利。

目前,arrow有4条线。 但它们应当正确。 我尝试采用轮换制,但我无法解决这一问题,因为我认为,我无法从模板外的模板中处理一个关键的问题,因此,我为了轮换——45度,就出现了错误,说它能够发现我的转变。

Any ideas on this?

<Style x:Key="ExpanderNoButtonStyle" TargetType="toolkit:Expander">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="toolkit:Expander">
                    <Grid Background="Transparent">
                        <vsm:VisualStateManager.VisualStateGroups>
                            <vsm:VisualStateGroup x:Name="ExpandDirectionStates">
                                <vsm:VisualStateGroup.Transitions>
                                    <vsm:VisualTransition GeneratedDuration="0"/>
                                </vsm:VisualStateGroup.Transitions>
                                <vsm:VisualState x:Name="ExpandLeft">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="ExpanderButton" Storyboard.TargetProperty="(Grid.Column)">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="1"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="ExpandSite" Storyboard.TargetProperty="(Grid.Row)">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="0"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="rd0" Storyboard.TargetProperty="Height">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="*"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="cd0" Storyboard.TargetProperty="Width">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="*"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <DoubleAnimation Storyboard.TargetName="myTransform" Storyboard.TargetProperty="Angle" From="0.0" To="-45.0" Duration="0" />
                                    </Storyboard>
                                </vsm:VisualState>
                            </vsm:VisualStateGroup>
                        </vsm:VisualStateManager.VisualStateGroups>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" x:Name="rd0"/>
                                <RowDefinition Height="Auto" x:Name="rd1"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" x:Name="cd0"/>
                                <ColumnDefinition Width="Auto" x:Name="cd1"/>
                            </Grid.ColumnDefinitions>
                            <ToggleButton Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" FontStyle="{TemplateBinding FontStyle}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" Grid.Column="0" Grid.Row="0" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsChecked="{TemplateBinding IsExpanded}" Margin="1" MinHeight="0" MinWidth="0" x:Name="ExpanderButton" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}">
                                <ToggleButton.Template>
                                    <ControlTemplate TargetType="ToggleButton">
                                        <Grid>
                                            <Grid.Background>
                                                <LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5,1">
                                                    <GradientStop Color="white" Offset="0"/>
                                                    <GradientStop Color="#FFAAAAAA" Offset="1"/>
                                                </LinearGradientBrush>
                                            </Grid.Background>
                                            <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
                                                <Grid.RenderTransform>
                                                    <RotateTransform x:Name="myTransform" Angle="0" CenterX="7.5" CenterY="7.5"/>
                                                </Grid.RenderTransform>
                                                <Ellipse Width="15" Height="15" Fill="#FF888888"/>
                                                <Line Stroke="White" X1="3" Y1="4" X2="7.5" Y2="8" />
                                                <Line Stroke="White" X1="12" Y1="4" X2="7.5" Y2="8" />
                                                <Line Stroke="White" X1="3" Y1="8" X2="7.5" Y2="12" />
                                                <Line Stroke="White" X1="12" Y1="8" X2="7.5" Y2="12" />
                                            </Grid>
                                        </Grid>
                                    </ControlTemplate>
                                </ToggleButton.Template>
                            </ToggleButton>
                        </Grid>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

<><>Edit>/strong>

This is how the good version look like (expands down, see arrows). I now want these arrows to be rotated 45 degrees so i can use it for al for sides.

“Expander”/

最佳回答

我创建了4个可能的国家,并将它们补充到电网资源中。 这样,当某个方向被叫去时,就会打上适当的模板。 因此,每一模板都独一无二,无需再轮换。

这里是4个模板的xaml,希望有人能够使用这些模板。

<ControlTemplate x:Key="ExpanderDownHeaderTemplate" TargetType="ToggleButton">
<Grid Background="Transparent">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CheckStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="00:00:00"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Checked">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Data" Storyboard.TargetName="arrow">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="M 1,1.5 L 4.5,5 L 8,1.5"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Unchecked"/>
        </VisualStateGroup>
        <VisualStateGroup x:Name="CommonStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="MouseOver"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="Pressed"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="MouseOver">
                <Storyboard>
                    <DoubleAnimation BeginTime="0" To="1" Storyboard.TargetProperty="(Border.Opacity)" Storyboard.TargetName="brdExpander"/>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Pressed" />
        </VisualStateGroup>
        <VisualStateGroup x:Name="FocusStates">
            <VisualState x:Name="Focused" />
            <VisualState x:Name="Unfocused"/>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border Name="brdExpander" Padding="{TemplateBinding Padding}" CornerRadius="1" Opacity="0.7" Background="{StaticResource ToggleButtonBackground}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
            <Path x:Name="arrow" Data="M 1,4.5 L 4.5,1 L 8,4.5" HorizontalAlignment="Center" Stroke="{StaticResource ItemYellow}" StrokeThickness="2" VerticalAlignment="Center"/>
            <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1" HorizontalAlignment="Center" Margin="10,0,0,0" VerticalAlignment="Center"/>
        </StackPanel>
    </Border>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="ExpanderUpHeaderTemplate" TargetType="ToggleButton">
<Grid Background="Transparent">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CheckStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="00:00:00"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Checked">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Data" Storyboard.TargetName="arrow">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="M 1,5 L 4.5,1.5 L 8,5"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Unchecked"/>
        </VisualStateGroup>
        <VisualStateGroup x:Name="CommonStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="MouseOver"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="Pressed"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="MouseOver">
                <Storyboard>
                    <DoubleAnimation BeginTime="0" To="1" Storyboard.TargetProperty="(Border.Opacity)" Storyboard.TargetName="brdExpander"/>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Pressed" />
        </VisualStateGroup>
        <VisualStateGroup x:Name="FocusStates">
            <VisualState x:Name="Focused" />
            <VisualState x:Name="Unfocused"/>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border Name="brdExpander" Padding="{TemplateBinding Padding}" CornerRadius="1" Opacity="0.7" Background="{StaticResource ToggleButtonBackground}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
            <Path x:Name="arrow" Data="M 1,1 L 4.5,4.5 L 8,1" HorizontalAlignment="Center" Stroke="{StaticResource ItemYellow}" StrokeThickness="2" VerticalAlignment="Center"/>
            <ContentPresenter x:Name="header" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1" HorizontalAlignment="Stretch" Margin="10,0,0,0" VerticalAlignment="Center"/>
        </StackPanel>
    </Border>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="ExpanderLeftHeaderTemplate" TargetType="ToggleButton">
<Grid Background="Transparent">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CheckStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="00:00:00"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Checked">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Data" Storyboard.TargetName="arrow">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="M 4.5,1 L 1,4.5 L 4.5,8"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Unchecked"/>
        </VisualStateGroup>
        <VisualStateGroup x:Name="CommonStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="MouseOver"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="Pressed"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="MouseOver">
                <Storyboard>
                    <DoubleAnimation BeginTime="0" To="1" Storyboard.TargetProperty="(Border.Opacity)" Storyboard.TargetName="brdExpander"/>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Pressed" />
        </VisualStateGroup>
        <VisualStateGroup x:Name="FocusStates">
            <VisualState x:Name="Focused" />
            <VisualState x:Name="Unfocused"/>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border Name="brdExpander" Padding="{TemplateBinding Padding}" CornerRadius="1" Opacity="0.7" Background="{StaticResource ToggleButtonBackground}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
            <Path x:Name="arrow" Data="M 1,1 L 4.5,4.5 L 1,8" HorizontalAlignment="Center" Stroke="{StaticResource ItemYellow}" StrokeThickness="2" VerticalAlignment="Center"/>
            <layoutToolkit:LayoutTransformer>
                <layoutToolkit:LayoutTransformer.LayoutTransform>
                    <TransformGroup>
                        <RotateTransform Angle="270"/>
                    </TransformGroup>
                </layoutToolkit:LayoutTransformer.LayoutTransform>
                <ContentPresenter x:Name="header" ContentTemplate="{TemplateBinding ContentTemplate}" HorizontalAlignment="Center" Margin="0,0,10,0" Grid.Row="1" VerticalAlignment="Stretch" >
                    <!-- Content="{TemplateBinding Content}"-->
                    <ContentPresenter.Content>
                        <TextBlock Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}"/>
                    </ContentPresenter.Content>
                </ContentPresenter>
            </layoutToolkit:LayoutTransformer>
        </StackPanel>
    </Border>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="ExpanderRightHeaderTemplate" TargetType="ToggleButton">
<Grid Background="Transparent">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CheckStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="00:00:00"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Checked">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Data" Storyboard.TargetName="arrow">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="M 1,1 L 4.5,4.5 L 1,8"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Unchecked"/>
        </VisualStateGroup>
        <VisualStateGroup x:Name="CommonStates">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="MouseOver"/>
                <VisualTransition GeneratedDuration="00:00:00.1" To="Pressed"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="MouseOver">
                <Storyboard>
                    <DoubleAnimation BeginTime="0" To="1" Storyboard.TargetProperty="(Border.Opacity)" Storyboard.TargetName="brdExpander"/>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Pressed" />
        </VisualStateGroup>
        <VisualStateGroup x:Name="FocusStates">
            <VisualState x:Name="Focused" />
            <VisualState x:Name="Unfocused"/>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border Name="brdExpander" Padding="{TemplateBinding Padding}" CornerRadius="1" Opacity="0.7" Background="{StaticResource ToggleButtonBackground}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Path x:Name="arrow" Data="M 4.5,1 L 1,4.5 L 4.5,8" HorizontalAlignment="Center" Stroke="{StaticResource ItemYellow}" StrokeThickness="2" VerticalAlignment="Center"/>
            <layoutToolkit:LayoutTransformer>
                <layoutToolkit:LayoutTransformer.LayoutTransform>
                    <TransformGroup>
                        <RotateTransform Angle="90"/>
                    </TransformGroup>
                </layoutToolkit:LayoutTransformer.LayoutTransform>
                <ContentPresenter x:Name="header" ContentTemplate="{TemplateBinding ContentTemplate}" HorizontalAlignment="Center" Margin="10,0,0,0" Grid.Row="1" VerticalAlignment="Stretch">
                    <ContentPresenter.Content>
                        <TextBlock Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}"/>
                    </ContentPresenter.Content>
                </ContentPresenter>
            </layoutToolkit:LayoutTransformer>
        </StackPanel>
    </Border>
</Grid>
</ControlTemplate>
问题回答

If I understand what you re asking, I think you can get the answer if you look at the default Expander template. You can do this by creating a new temp project, dropping an Expander on the artboard, and right-clicking it in the Objects list and creating a copy of the template.

你们看到,扩大者有扩大、扩大、扩大权利和扩大权利的视觉国家。 就不同方向而言,每一个国家都把ToggleButton扩大到一个上下、左或右模板。 每一方向还混淆了扩大电网,将 but子和扩展区置于正确的位置。

你们需要创建左边和右边的ToggleButton模板。 这样,你就可以设计arrow,指明正确的道路。 然后,在“扩大”左边和“适当的视觉状态”中,这些模板就指出了。

Hopefully that makes sense. I think if you look at the default template it should be clear, but it s been a while since I ve done it. I remember they didn t do all the states, though.

Here s my SL example. Our app only needed up and down so there s no left or right, but hopefully it can get you started. The arrows rotate so you can see how that works too.

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
xmlns:System="clr-namespace:System;assembly=mscorlib" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d">

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/BasicResources;component/BasicStyles.xaml"/>
    <ResourceDictionary Source="/BasicResources;component/BasicResource.xaml"/>
</ResourceDictionary.MergedDictionaries>


<!-- Named fade brush for visual effect on Expander Header right edge -->
<!-- this brush is specified here as it uses resource brushes, so will work properly with high contrast -->
<LinearGradientBrush x:Key="ExpanderHeaderFadeBrush" StartPoint="0,0" EndPoint="1,0">
    <GradientStop Color="Transparent"/>
    <GradientStop Color="{StaticResource BgColor}" Offset="1"/> 
</LinearGradientBrush>

<Style x:Key="ExpanderHeaderBorderStyle" TargetType="Border">
    <Setter Property="BorderBrush" Value="{StaticResource BorderRestBrush}"/>
    <Setter Property="BorderThickness" Value="0,0.5,0,0"/>  
    <Setter Property="VerticalAlignment" Value="Bottom"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="Background" Value="{StaticResource MouseDownBgBrush}"/>
</Style>

<ControlTemplate x:Key="ExpanderHeaderCT" TargetType="ContentControl">
    <Border
        x:Name="bdrControlFooter"
        Style="{StaticResource ExpanderHeaderBorderStyle}"
        Height="{TemplateBinding Height}">

        <Border
            x:Name="bdrTopInner"
            BorderBrush="{StaticResource WhiteBrush}"
            BorderThickness="0,1,0,0">
            <ContentPresenter
                Cursor="{TemplateBinding Cursor}"
                ContentTemplate="{TemplateBinding ContentTemplate}"
                Content="{TemplateBinding Content}"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                Margin="{TemplateBinding Padding}"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
        </Border>
    </Border>
</ControlTemplate>

<Style x:Key="ExpanderHeaderContentStyle" TargetType="ContentControl">
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Setter Property="Height" Value="44" />
    <Setter Property="Template" Value="{StaticResource ExpanderHeaderCT}" />
</Style>

<!-- down button template -->
<ControlTemplate x:Key="ExpanderDownHeaderTemplate" TargetType="ToggleButton">
    <Grid Background="Transparent">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CheckStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.1"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Checked">
                    <Storyboard>
                        <DoubleAnimation Duration="0" To="45" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="pathTwirly" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked"/>
                <VisualState x:Name="Indeterminate"/>
            </VisualStateGroup>
            <VisualStateGroup x:Name="CommonStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.3"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Normal"/>
                <VisualState x:Name="MouseOver">
                    <Storyboard>
                        <ColorAnimation Duration="0" To="{StaticResource OrangeColor}" FillBehavior="HoldEnd" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="header" />
                        <ColorAnimation Duration="0" To="{StaticResource OrangeColor}" FillBehavior="HoldEnd" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="pathTwirly" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Pressed">
                </VisualState>
                <VisualState x:Name="Disabled"/>
            </VisualStateGroup>
            <VisualStateGroup x:Name="FocusStates">
                <VisualState x:Name="Focused">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="FocusVisualElement">
                            <DiscreteObjectKeyFrame KeyTime="0">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Visible</Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Unfocused"/>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

        <Grid Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="58"/>
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <ContentControl x:Name="contentOuter" 
                Style="{StaticResource ExpanderHeaderContentStyle}"
                VerticalContentAlignment="Stretch" 
                VerticalAlignment="Stretch"
                Height="58">

                <Grid x:Name="gInnerGrid" 
                    Background="{StaticResource GradientHeaderBgBrush}" >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50"/>
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

                    <Path x:Name="pathTwirly" 
                        Data="F1 M 0.000,10.000 L 5.500,4.999 L 0.000,0.000 L 0.000,10.000 Z"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center"
                        Margin="35,0,0,0"
                        RenderTransformOrigin="0.5,0.5">
                        <Path.RenderTransform>
                            <CompositeTransform/>
                        </Path.RenderTransform>
                        <Path.Fill>
                            <SolidColorBrush x:Name="brushPathFill" Color="{StaticResource BlueColor}" />
                        </Path.Fill>
                    </Path>

                    <Rectangle x:Name="rectFade"
                        Grid.Column="1"
                        Width="75"
                        HorizontalAlignment="Right"
                        Fill="{StaticResource ExpanderHeaderFadeBrush}"/>

                    <TextBlock x:Name="header"
                        Text="{TemplateBinding Content}"
                        Style="{StaticResource BlueSmallHeadingText}"
                        Grid.Column="1"
                        HorizontalAlignment="Stretch" 
                        Margin="4,0,0,0" 
                        VerticalAlignment="Center">
                        <TextBlock.Foreground>
                            <SolidColorBrush x:Name="brushHeader" Color="{StaticResource BlueColor}"/>
                        </TextBlock.Foreground>
                    </TextBlock>
                </Grid>
            </ContentControl>
        </Grid>

        <!-- strokedasharray specified here .. silverlight bug that it won t pick up that style element. works fine in up! -->
        <Rectangle x:Name="FocusVisualElement" 
            Style="{StaticResource LinkRectangleFocusStyle}"
            IsHitTestVisible="false" 
            StrokeThickness="1" 
            StrokeDashArray="1,3"
            Visibility="Collapsed"/>
    </Grid>
</ControlTemplate>

<!-- up button template -->
<ControlTemplate x:Key="ExpanderUpHeaderTemplate" TargetType="ToggleButton">
    <Grid Background="Transparent">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CheckStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="00:00:0.1"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Checked">
                    <Storyboard>
                        <DoubleAnimation Duration="0" To="-45" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="pathTwirly" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked"/>
            </VisualStateGroup>
            <VisualStateGroup x:Name="CommonStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.3"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Normal"/>
                <VisualState x:Name="MouseOver">
                    <Storyboard>
                        <ColorAnimation Duration="0" To="{StaticResource OrangeColor}" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="header" />
                        <ColorAnimation Duration="0" To="{StaticResource OrangeColor}" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="pathTwirly" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Pressed"/>
                <VisualState x:Name="Disabled"/>
            </VisualStateGroup>
            <VisualStateGroup x:Name="FocusStates">
                <VisualState x:Name="Focused">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="FocusVisualElement">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Unfocused"/>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

        <Grid Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="58"/>
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <ContentControl x:Name="contentOuter" 
                Style="{StaticResource ExpanderHeaderContentStyle}"
                VerticalContentAlignment="Stretch" 
                Height="58">

                <Grid x:Name="gInnerGrid" 
                    Background="{StaticResource GradientHeaderBgBrush}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50"/>
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

                    <Path x:Name="pathTwirly" 
                        Data="F1 M 0.000,10.000 L 5.500,4.999 L 0.000,0.000 L 0.000,10.000 Z"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center"
                        Margin="35,0,0,0"
                        RenderTransformOrigin="0.5,0.5">
                        <Path.RenderTransform>
                            <CompositeTransform/>
                        </Path.RenderTransform>
                        <Path.Fill>
                            <SolidColorBrush x:Name="brushPathFill" Color="{StaticResource BlueColor}"/>
                        </Path.Fill>
                    </Path>

                    <Rectangle x:Name="rectFade"
                        Grid.Column="1"
                        Width="75"
                        HorizontalAlignment="Right"
                        Fill="{StaticResource ExpanderHeaderFadeBrush}"/>

                    <TextBlock x:Name="header"
                        Text="{TemplateBinding Content}"
                        Style="{StaticResource BlueSmallHeadingText}"
                        Grid.Column="1"
                        HorizontalAlignment="Stretch" 
                        Margin="4,0,0,0" 
                        VerticalAlignment="Center">
                        <TextBlock.Foreground>
                            <SolidColorBrush x:Name="brushHeader" Color="{StaticResource BlueColor}"/>
                        </TextBlock.Foreground>
                    </TextBlock>
                </Grid>
            </ContentControl>
        </Grid>

        <Rectangle x:Name="MouseOverBorderElement"
            Style="{StaticResource RectangleMouseOverStyle}"
            Grid.ColumnSpan="2"
            Opacity="0"/>

        <Rectangle x:Name="FocusVisualElement" 
            Style="{StaticResource LinkRectangleFocusStyle}"
            IsHitTestVisible="false" 
            Visibility="Collapsed"/>

    </Grid>
</ControlTemplate>

<!-- main expander template -->
<ControlTemplate x:Key="ExpanderCT" TargetType="toolkit:Expander">
    <Grid Background="Transparent">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Normal"/>
                <VisualState x:Name="Disabled">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="DisabledVisualElement">
                            <DiscreteObjectKeyFrame KeyTime="0">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Visible</Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="MouseOver"/>
                <VisualState x:Name="Pressed"/>
            </VisualStateGroup>
            <!-- focus comes from the expander togglebutton -->
            <VisualStateGroup x:Name="FocusStates">
                <VisualState x:Name="Focused"/>
                <VisualState x:Name="Unfocused"/>
            </VisualStateGroup>
            <VisualStateGroup x:Name="ExpansionStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Collapsed"/>
                <VisualState x:Name="Expanded">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="ExpandSite">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
            <VisualStateGroup x:Name="ExpandDirectionStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="ExpandDown">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Height" Storyboard.TargetName="rd1">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="*"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Width" Storyboard.TargetName="cd0">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="*"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="ExpandUp">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Template" Storyboard.TargetName="ExpanderButton">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ExpanderUpHeaderTemplate}"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="(Grid.Row)" Storyboard.TargetName="ExpanderButton">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="1"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="(Grid.Row)" Storyboard.TargetName="ExpandSite">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="0"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Height" Storyboard.TargetName="rd0">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="*"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Width" Storyboard.TargetName="cd0">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="*"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="ExpandLeft" />
                <VisualState x:Name="ExpandRight" />
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

        <!-- begin layout -->
        <Border x:Name="Background" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition x:Name="cd0" Width="Auto"/>
                    <ColumnDefinition x:Name="cd1" Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition x:Name="rd0" Height="Auto"/>
                    <RowDefinition x:Name="rd1" Height="Auto"/>
                </Grid.RowDefinitions>

                <ToggleButton x:Name="ExpanderButton" 
                    ContentTemplate="{TemplateBinding HeaderTemplate}" 
                    Content="{TemplateBinding Header}" 
                    Grid.Column="0" 
                    Foreground="{TemplateBinding Foreground}" 
                    FontWeight="{TemplateBinding FontWeight}" 
                    FontStyle="{TemplateBinding FontStyle}" 
                    FontStretch="{TemplateBinding FontStretch}" 
                    FontSize="{TemplateBinding FontSize}" 
                    FontFamily="{TemplateBinding FontFamily}" 
                    HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                    IsChecked="{TemplateBinding IsExpanded}" 
                    Margin="0" 
                    MinWidth="0" 
                    MinHeight="0" 
                    Padding="{TemplateBinding Padding}" 
                    Grid.Row="0" 
                    Template="{StaticResource ExpanderDownHeaderTemplate}" 
                    VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>

                <ContentControl x:Name="ExpandSite" 
                    ContentTemplate="{TemplateBinding ContentTemplate}" 
                    Content="{TemplateBinding Content}" 
                    Grid.Column="0" 
                    Foreground="{TemplateBinding Foreground}" 
                    FontWeight="{TemplateBinding FontWeight}" 
                    FontStyle="{TemplateBinding FontStyle}" 
                    FontStretch="{TemplateBinding FontStretch}" 
                    FontSize="{TemplateBinding FontSize}" 
                    FontFamily="{TemplateBinding FontFamily}" 
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                    HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                    Margin="{TemplateBinding Padding}" 
                    Grid.Row="1" 
                    Visibility="Collapsed" 
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                    VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> 
            </Grid>
        </Border>

        <Border x:Name="DisabledVisualElement" 
            Style="{StaticResource BorderDisabledStyle}" 
            IsHitTestVisible="false" 
            Visibility="Collapsed"/>

        <Border x:Name="FocusVisualElement" 
            Style="{StaticResource BorderFocusStyle}" 
            IsHitTestVisible="false" 
            Visibility="Collapsed"/>
    </Grid>
</ControlTemplate>

<!-- styles the expander header .. the top line and background color -->

<Style TargetType="toolkit:Expander">
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="Template" Value="{StaticResource ExpanderCT}"/>
</Style>    





相关问题
Silverlight Rich text box control

Our team decided that we need our own custom Rich text box control for Silverlight app we are developing. We looked at existing controls mentioned at A good rich text control for Silverlight but ...

Silverlight ImageBrush not rendering (with Bing Map Control)

I m trying to add an image to a Pushpin instance from the Silverlight Bing Map Control, but I can t seem to get it to render (the pushpin renders fine). This is probably a general WPF question rather ...

Silverlight OpenFileDialog DoEvents equivalent

I m processing large files after they are selected by the user. My code looks like the following: if (FileDialog.ShowDialog() == true) { // process really big file } This freezes up the UI so ...

list of controls with templates in silverlight

Does anyone know where to find a list of controls that you can set the template on in Silverlight? I ve wasted several hours now trying to create control templates only to find that the control doesn ...

Silverlight, Updating the UI during processing

I have a simple silverlight multifile upload application, and i want to provide the user with some feedback, right now its only in a test phase and i dont have the webservice. Somehow i cant get the ...

Silverlight 3 - FindName returns null

This looks a bug to me.. Using Silverlight 3 and i have a user control defined in XAML and trying to access the object during runtime returns a null. <Grid> <common:CommonGridEditPanel x:...

silverlight 3 collection binding

Someone please help me understand why this binding does not work... I have a class called SelectionManager with a property called dates which is populated by a WCF service. The property is an ...

热门标签