首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WP7: LayoutTransform a ListBoxItem

WP7: LayoutTransform a ListBoxItem
EN

Stack Overflow用户
提问于 2012-01-19 04:19:03
回答 1查看 506关注 0票数 2

这是我的XAML:

代码语言:javascript
复制
<ListBox x:Name="MyListBox" FontSize="40"
            SelectionChanged="MyListBox_SelectionChanged">
</ListBox>            

在这个代码背后(下面),我试图动画一个删除行动。当项目被选中时,我会删除它。我用ScaleTransform在视觉上给它动画。在WPF中,我会使用LayoutTransform,但是由于我只有WP/SL中的RenderTransform,所以我使用的是RenderTransform,因此周围的布局没有响应大小的变化。记录仍被正确删除,但视觉效果减弱。

有办法在WP中这样做吗?有办法调整ListBoxItem的大小以使周围的内容响应吗?

代码语言:javascript
复制
ObservableCollection<string> m_Data;

public MainPage()
{
    InitializeComponent();
    m_Data = new ObservableCollection<string>   
        { "One", "Two", "Three", "Four" };
    MyListBox.ItemsSource = m_Data;
}

private void MyListBox_SelectionChanged(object sender,
    SelectionChangedEventArgs e)
{
    // fetch ListBoxItem
    if (e.AddedItems.Count == 0)
        return;
    var _Data = e.AddedItems[0] as string;
    var _Item = MyListBox.ItemContainerGenerator
        .ContainerFromItem(_Data) as ListBoxItem;

    // setup to resize using scale transform
    var _Scale = new ScaleTransform
    {
        CenterX = _Item.RenderSize.Width / 2,
        CenterY = _Item.RenderSize.Height / 2,
        ScaleX = .99,
        ScaleY = .99
    };
    _Item.RenderTransform = _Scale;

    // setup storyboard
    var _Story = new Storyboard();
    _Story.Completed += (s, e1) =>
    {
        // remove data from collection
        m_Data.Remove(_Data);
    };

    // animate scale X
    var _AnimationX = new DoubleAnimation
    {
        To = .01,
        Duration = TimeSpan.FromSeconds(2),
    };
    _Story.Children.Add(_AnimationX);
    Storyboard.SetTarget(_AnimationX, _Scale);
    Storyboard.SetTargetProperty(_AnimationX,
        new PropertyPath(ScaleTransform.ScaleXProperty));

    // animate scale Y
    var _AnimationY = new DoubleAnimation
    {
        To = .01,
        Duration = TimeSpan.FromSeconds(2),
    };
    _Story.Children.Add(_AnimationY);
    Storyboard.SetTarget(_AnimationY, _Scale);
    Storyboard.SetTargetProperty(_AnimationY,
        new PropertyPath(ScaleTransform.ScaleYProperty));

    _Story.Begin();
}
EN

回答 1

Stack Overflow用户

发布于 2012-12-07 17:42:57

您也可以使用Windows上的LayoutTransform,所以我只需要使用它。。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8920964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档