2011-06-07 86 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>