1

我想编写一个自定义控件,并希望它在页面是纵向或对齐时具有不同的填充。我注意到页面继承自 LayoutAwarePage,它创建了对以下视图状态的支持:

  • 全屏横向
  • 填充
  • 全屏人像
  • 抢购

我是否需要将类似的代码添加到我的新控件(它继承自 Control)。如果不是,为什么 LayoutAwarePage 必须这样做?另外,我可以将以下 VisualStateManager 粘贴到我的控件的 ControlTemplate 中并让它尊重页面布局还是这太容易了。

<VisualStateGroup x:Name="ApplicationViewStates">
    <VisualState x:Name="FullScreenLandscape"/>
    <VisualState x:Name="Filled"/>
    <VisualState x:Name="FullScreenPortrait">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Padding">
                <DiscreteObjectKeyFrame KeyTime="0" Value="1,2,3,4"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
    <VisualState x:Name="Snapped">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Padding">
                <DiscreteObjectKeyFrame KeyTime="0" Value="5,6,7,8"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
</VisualStateGroup>

编辑:看起来控件默认不支持这些状态,必须添加它们。看来 ButtonBase 确实支持这些状态,因为它在其样式中使用它们。

4

2 回答 2

2

如果您查看 Windows 8 项目中的默认“详细信息”页面,您会发现它希望您订阅页面上的事件。您将在翻转视图中找到以下内容ItemTemplate

<FlipView.ItemTemplate>
    <UserControl Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates">
        <ScrollViewer x:Name="scrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}"
            <!-- "Child Controls Here" -->
                <VisualStateManager.VisualStateGroups>
                    <!-- "Visual states manuiplating the child controls above" -->
            </VisualStateManager.VisualStateGroups>
        </ScrollViewer>
    </UserControl>
</FlipView.ItemTemplate>
于 2012-12-11T09:02:37.283 回答
1

我对用户控件所做的就是让它们继承 LayoutAwarePage。接下来将内容放置在网格中并将 VisualStateGroup 移动到此网格中。希望这会有所帮助,它对我有用。

于 2012-10-05T15:09:08.700 回答