WPF ListItem放大事件

时间:2010-06-29 05:56:20

标签: c# wpf user-interface xaml

假设我没有列表框,或者我现在正在使用绑定到它的项目的Wrap面板。如果重要,这些项目使用自定义控件的自定义数据模板。

现在我想对点击(或任何一般事件)做出反应,并向用户缩放项目,重叠周围的项目。基本上是用户选择的特定项目的更详细视图。该项目将向用户缩放,显示更多内容和选项以与其进行交互。

非常像这里:http://ie.microsoft.com/testdrive/Performance/AmazonShelf/Default.html

问题很简单,所有其他项目将随着它的增长为所选项目腾出空间。我不想要这个。

我无法弄清楚如何让它与周围的物品重叠。我应该使用什么项目容器(请记住我有点想要/需要包装行为)

任何提示将不胜感激。如果有任何新内容,请使用WPF 4?

谢谢。

更新: 我想和Josh的建议一起去。 乔希,这听起来就像我需要的一样。无论我做什么,我似乎无法让RenderTransform发生。我把头发拉出来了。

为什么这不起作用?动画淡出效果很好。关于click事件的两个评论动画也可以正常工作。但渲染变换不会做任何事情。

我试过了: “(Grid.RenderTransform)。(RotateTransform.Angle)” “的RenderTransform。(RotateTransform.Angle)” “(的RenderTransform)。(RotateTransform.Angle)” “(FrameworkElement的)。(RotateTransform.Angle)” “(项目)。(RotateTransform.Angle)”

你们如何调试这些东西?到目前为止,没有Intellisense,它对我来说或多或少是一个猜谜游戏。

 <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <my:custom x:Name="Item" Margin="10,10 10,10" />
                                </Grid>

                                <DataTemplate.Triggers>
                                    <EventTrigger RoutedEvent="FrameworkElement.Loaded" SourceName="Item">
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <DoubleAnimation Storyboard.TargetName="Item" Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:0:2"/>
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </EventTrigger>
                                    <EventTrigger RoutedEvent="FrameworkElement.MouseUp" SourceName="Item">
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <!--<DoubleAnimation Storyboard.TargetName="Item" Storyboard.TargetProperty="Width" To="200" Duration="0:0:2" />-->
                                                <!--<DoubleAnimation Storyboard.TargetName="Item" Storyboard.TargetProperty="Height" To="400" Duration="0:0:2" />-->
                                                        <DoubleAnimation Storyboard.TargetName="Item" Storyboard.TargetProperty="(Grid.RenderTransform).(RotateTransform.Angle)" From="0" To="180" Duration="0:0:2" />
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </EventTrigger>
                                </DataTemplate.Triggers>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>

2 个答案:

答案 0 :(得分:0)

Wrappanel将根据大小制作房间。你应该使用Canvas进行这种Zoom行为。既然你也想要Wrappanel,你可以在Wrappanel的顶部添加一个Canvas。当您单击某个项目时,只需将该单击的项目添加到Canvas children&amp;设置合适的尺寸,Canvas.Top&amp; Canvas.Left,在某些事件中删除相同的内容。

答案 1 :(得分:0)

啊,我开始撰写一篇关于类似技术的博客文章,我用它来自定义ListBox(see this page,用于模拟iPhone详细信息视图的标准Silverlight ListBox示例。)不幸的是我从未完成过帖子。

无论如何,您需要做的是将渲染变换应用于您可以设置动画的项目。然后在动画结束时,您可以将另一个元素翻转到包含详细信息视图的前景。与布局转换不同,渲染变换不会影响其他项的布局。