【问题标题】:How to convert an Expander's Style in WPF to Silverlight如何将 WPF 中的扩展器样式转换为 Silverlight
【发布时间】:2011-06-07 20:23:31
【问题描述】:

我在 WPF 中有以下 xaml 样式,我想将其移植到 silverlight。 我在使用 silverlight 中不存在的 ControlTemplate 触发器时遇到问题。 我正在尝试 Interaction.Triggers 但它不起作用。 如何将 ControlTemplate 触发器转换为 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>

提前致谢。

【问题讨论】:

  • 这是您自己的扩展器还是工具包中的扩展器?
  • silverlight中的扩展器来自System.Windows.Controls.Toolkit,上面的代码是WPF

标签: silverlight templates coding-style controltemplate


【解决方案1】:

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

因此,在您的模板中,您需要以下内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多