none
silverlight中如何用C#代码获取控件的TranslateX属性 RRS feed

答案

  • 你好,

    根据你的代码,我猜想你是想要实现让“ConTwo” 在上一次的位置进行再平移。

    我不知道你上面的代码是放在哪里的,如果是页面的构造函数里,那ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty))的值当然会是0(初始值),而且也不会实现你的功能,因为对于sboard而言,ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty))始终为零。

    但如果你调用sboard.Begin(),再对ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty))进行取值,就不会有是零了,你可以进行测试一下。

     

    对于你的需求,你可以这样来实现,构造函数里的代码与你上面的代码有点不同,请对比一下:

            // 让 danima9变成成员字段
            DoubleAnimation danima9 = new DoubleAnimation();
            public MainPage()
            {
                InitializeComponent();

                Storyboard sboard = new Storyboard();

                danima9.From = Convert.ToDouble(ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty));
                danima9.To = (Right+ 7 - ConT.ActualWidth) / 2;

                danima9.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 600));

                sboard.Children.Add(danima9);

                Storyboard.SetTargetName(danima9, "ConTwo");
                Storyboard.SetTargetProperty(danima9, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));

                if (LayoutRoot.Resources["Storyboard"] == null)
                {
                    this.LayoutRoot.Resources.Add("Storyboard", sboard);
                }


            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                Storyboard sboard = LayoutRoot.Resources["Storyboard"] as Storyboard;

                // 获取上一次平移的位置
                var v = Convert.ToDouble(ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty));

                danima9.From = v;
                danima9.To = v + 100.0; //在上一次的基础上再平移100像素

                sboard.Begin();
            }


    Daoping Liu - MSFT
    2011年9月26日 3:36
    版主

全部回复

  • 人工置顶

    2011年9月19日 9:22
  • 您好,

    可以在CompositeTransform中給定Name屬性

    <CompositeTransform x:Name="translate" TranslateX="0" />
    

    在C#程式中就可以進行操作

    translate.TranslateX = 100;
    


    2011年9月19日 10:48
  • 问题是我的TranslateX是在 C#后台用动画创建的

    此时我想获取当前的TranslateX属性

    2011年9月20日 2:07
  • 您好,

    您可以試試下面方法 

    string x = rectangle1.RenderTransform.GetValue(TranslateTransform.XProperty).ToString();

     



    2011年9月20日 3:21
  • 报这个错:  灾难性故障 (异常来自 HRESULT0x8000FFFF (E_UNEXPECTED))
    2011年9月20日 6:58
  • 问题是我的TranslateX是在 C#后台用动画创建的

    此时我想获取当前的TranslateX属性


    你好,

    可否将相关代码给我们看看。

    我估计在你的后台代码中使用了CompositeTransform,所以你可以试试下面的语句:

    var  v = rectangle.RenderTransform.GetValue(CompositeTransform.TranslateXProperty)


    Daoping Liu - MSFT
    2011年9月21日 3:29
    版主
  • Storyboard sboard = new Storyboard();
    
    DoubleAnimation danima9 = new DoubleAnimation();             
    
    danima9.SetValue(Storyboard.TargetNameProperty, "ConTwo");
    
    ConTwo.RenderTransform = new CompositeTransform();
    
    danima9.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));
    
    danima9.From=Convert.ToDouble(ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty));
    
    danima9.To = (Right+7-ConT.ActualWidth) / 2;
    
    danima9.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 600));
    
    sboard.Children.Add(danima9);
    
    this.LayoutRoot.Resources.Add("Storyboard", sboard);
    
    


    好像还是获取不到 一直是0
    2011年9月21日 9:26
  • 你好,

    根据你的代码,我猜想你是想要实现让“ConTwo” 在上一次的位置进行再平移。

    我不知道你上面的代码是放在哪里的,如果是页面的构造函数里,那ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty))的值当然会是0(初始值),而且也不会实现你的功能,因为对于sboard而言,ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty))始终为零。

    但如果你调用sboard.Begin(),再对ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty))进行取值,就不会有是零了,你可以进行测试一下。

     

    对于你的需求,你可以这样来实现,构造函数里的代码与你上面的代码有点不同,请对比一下:

            // 让 danima9变成成员字段
            DoubleAnimation danima9 = new DoubleAnimation();
            public MainPage()
            {
                InitializeComponent();

                Storyboard sboard = new Storyboard();

                danima9.From = Convert.ToDouble(ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty));
                danima9.To = (Right+ 7 - ConT.ActualWidth) / 2;

                danima9.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 600));

                sboard.Children.Add(danima9);

                Storyboard.SetTargetName(danima9, "ConTwo");
                Storyboard.SetTargetProperty(danima9, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));

                if (LayoutRoot.Resources["Storyboard"] == null)
                {
                    this.LayoutRoot.Resources.Add("Storyboard", sboard);
                }


            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                Storyboard sboard = LayoutRoot.Resources["Storyboard"] as Storyboard;

                // 获取上一次平移的位置
                var v = Convert.ToDouble(ConTwo.RenderTransform.GetValue(CompositeTransform.TranslateXProperty));

                danima9.From = v;
                danima9.To = v + 100.0; //在上一次的基础上再平移100像素

                sboard.Begin();
            }


    Daoping Liu - MSFT
    2011年9月26日 3:36
    版主