2011-06-07 73 views
3

我在WPF中有以下xaml样式,并且我想将它移植到silverlight。 我遇到了Silverlight中不存在的ControlTemplate触发器问题。 我正在尝试Interaction.Triggers,但它不工作。 如何将ControlTemplate触发器转换为Silverlight中类似的东西?如何将WPF中的Expander风格转换为Silverlight

<Style x:Key="ImageExpander" TargetType="Expander"> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Expander"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Name="ContentRow" Height="0"/> 
       </Grid.RowDefinitions> 
       <Border Name="Border" Grid.Row="0"> 
        <Border.Background> 
         <ImageBrush ImageSource="image.png" Stretch="Fill" /> 
        </Border.Background> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="20" /> 
         </Grid.ColumnDefinitions> 
         <ContentPresenter Grid.Column="0" Margin="4" ContentSource="Header" RecognizesAccessKey="True"></ContentPresenter> 
         <ToggleButton Grid.Column="1" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" OverridesDefaultStyle="True" Template="{StaticResource ImageExpanderToggleButton}"/> 
        </Grid> 
       </Border> 
       <Border Name="Content" Grid.Row="1"> 
        <ContentPresenter Margin="0" /> 
       </Border> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsExpanded" Value="True"> 
        <Setter TargetName="ContentRow" Property="Height" Value="{Binding ElementName=Content,Path=DesiredHeight}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

在此先感谢。

+0

这是你自己的扩展或一个从工具包? – AnthonyWJones 2011-06-08 12:40:20

+0

Silverlight中的扩展器来自System.Windows.Controls.Toolkit,上面的代码是WPF – rfigueras 2011-06-08 20:48:57

回答

0

一般来说,WPF中的属性触发器的概念通常被Silverlight中的视觉状态所取代。在Expander.IsExpanded属性的情况下,这对应于展开的可视状态。

所以在你的模板,你会需要这样的东西:

<Grid> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="ExpansionStates"> 
      <VisualState x:Name="Collapsed"/> 
      <VisualState x:Name="Expanded"> 
       <Storyboard> 
        ... (some animation) 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    ... 
</Grid>