2010-06-16 28 views
0

我想在changeDirection按钮单击时更改我的选取框的方向。 我改变方向代码是:如何动态改变wpf选框的方向?

private void changeDirection_click(object sender, RoutedEventArgs e) 
    { 
     if (_marqueeType == MarqueeType.RightToLeft) 
     { 
      _marqueeType = MarqueeType.LeftToRight; 
      StartMarqueeing(_marqueeType); 
     } 
     else if (_marqueeType == MarqueeType.LeftToRight) 
     { 
      _marqueeType = MarqueeType.RightToLeft; 
      StartMarqueeing(_marqueeType); 
     } 
    } 

而对于开始选取框代码:

public void StartMarqueeing(MarqueeType marqueeType) 
    { 

     double height = canMain.ActualHeight - marqueeList.ActualHeight; 
     marqueeList.Margin = new Thickness(0, 0, 0, 0);    
     doubleAnimation.From = -marqueeList.ActualWidth; 
     doubleAnimation.To = canMain.ActualWidth; 
     doubleAnimation.RepeatBehavior = RepeatBehavior.Forever; 
     doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds)); 

     if (marqueeType == MarqueeType.RightToLeft) 
     { 
      Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Right)")); 
      _storyBoard.Children.Add(doubleAnimation); 
      _storyBoard.Begin(marqueeList, true); 
     } 
     else if (marqueeType == MarqueeType.LeftToRight) 
     { 
      Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)")); 
      _storyBoard.Children.Add(doubleAnimation); 
      _storyBoard.Begin(marqueeList, true); 
     } 
    } 

现在我在这里能的方向从右到左仅第一时间而改变。 但是,当我从左到右更改它不会将选取框位置从左到右更改。

请帮我解答...........其紧急!!!!!!!!!!!

+1

是的。请回到以前的问题,并接受你喜欢的答案。我知道你喜欢一些,因为你说过“非常感谢!!!”和“非常感谢你救我”。您可以通过点击窗口顶部的姓名来查看以前的问题。 – 2010-06-16 20:23:36

+0

嗨,大家好..我不知道这个..我的坏...但最近我更新了状态..所以谢谢你的建议...!你能帮我解决这个问题吗? – 2010-06-17 07:28:24

回答

2

它看起来像你遗漏了一个_storyboard = new Storyboard(),也许在StartMarqueeing方法的顶部。

从我看到的情况看,每次调用StartMarqueeing都会向故事板添加一个额外的DoubleAnimation,然后重新启动它。因此,所有旧的DoubleAnimations都会重新创建,看起来优先。

尝试每次创建一个新的Storyboard对象,而不仅仅是重新使用它并添加到它的子集合中。

更新

哦,现在我看到的问题。你不应该设置(Canvas.Left)和(Canvas.Right)。只能使用以下两种方法之一:无论如何您只需要这些,并且使用两者都会导致Canvas冲突的说明。传统上人们使用(Canvas.Left)。我认为这就是Canvas选择的内容,这是什么导致了你的不对称。

你可能想知道为什么我说你在同时使用两种动画的时候并不这么认为。实际上他们会这样做:第一个动画运行,然后将值保存在动画属性中,直到它被另一个动画移除或碰撞。如果第二个动画运行并修改其他属性,则不会撞击第一个动画,因此第一个动画的值仍然存在。

底线是,只要您使用默认的HandoffBehavior.SnapshotAndReplace,在两个动画上使用(Canvas.Left)都应该修复它。

+0

感谢您的回复..!我尝试过,但不工作..!在我上面的代码中,我从右侧初始化选取框,并在更改按钮上单击第一次从右向左更改它。但是如果我从左侧初始化选框,那么即使是第一次也不能从左到右改变它。这意味着左侧代码存在一些问题。 : - (((( – 2010-06-17 13:36:43

+0

啊哈!这引起我的注意。我没有注意到你设置了两个不同的属性。我添加了一个更新来解释我的答案,解释发生了什么问题以及如何解决它。 – 2010-06-17 13:53:11

+0

但是我不理解这个! 如果我同时设置Canvas。Left那么我怎样才能动态地改变字幕方向? – 2010-06-17 14:28:15