none
请问为啥SetValue(Canvas.LeftProperty, i)没有作用 RRS feed

  • 问题

  • <Window x:Class="文字滚动.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:文字滚动"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525" Background="Black">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="20"/>
            </Grid.RowDefinitions>
            <Canvas Grid.Row="1" Name="gridMain">
                <TextBlock   Foreground="White" VerticalAlignment="Center"  FontSize="15"  Name="tb1"/>
            </Canvas>
        </Grid>
    </Window>
    

    using System.Timers;
    using System.Windows;
    using System.Windows.Controls;
    
    namespace 文字滚动
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            Timer t = new Timer();
            public MainWindow()
            {
                InitializeComponent();
                t.Elapsed += T_Elapsed;
                t.Interval =  1000;
                t.Start();
                tb1.Text = @"fdsafdsafdsjklfjdsa          l奋斗精神亏了发动机撒娇的福利卡ds对方告诉了福建省佛教撒酒疯里看电视          ";
            }
    
            private void T_Elapsed(object sender, ElapsedEventArgs e)
            {
                i = i + 5;
                //tb1.Margin = new Thickness(tb1.Margin.Left + 5, 0, 0, 0);
                tb1.SetValue(Canvas.LeftProperty, i);
                if (i>gridMain.ActualWidth)
                {
                    i = 0;
                }
            }
            double i = 0;
    
        }
    }
    

    2016年12月23日 10:00

答案

  • 是不是缺少了

    t.Enable=true;

     t.Elapsed += T_Elapsed;
     t.Interval =  1000;
     t.Start();


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    不好意思,是我自己的问题,跨线程了。

     private void T_Elapsed(object sender, ElapsedEventArgs e)
            {
                try
                {
                    tb1.Dispatcher.Invoke(new Action(delegate
                    {
                        i = i + 5;
                        tb1.SetValue(Canvas.LeftProperty, i);
                        if (i > gridMain.ActualWidth)
                        {
                            i = 0 - tb1.ActualWidth;
                        }
                    }));
                }
                catch (System.Exception ex)
                {
                }
            }
            double i = 0;

    • 已标记为答案 彭123 2016年12月26日 1:26
    2016年12月26日 1:26

全部回复

  • 我想要每秒移动textblock5个像素,但是为啥设置了setvalue,却没有作用呢?
    2016年12月23日 10:01
  • 是不是缺少了

    t.Enable=true;

     t.Elapsed += T_Elapsed;
     t.Interval =  1000;
     t.Start();


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年12月23日 15:48
  • 是不是缺少了

    t.Enable=true;

     t.Elapsed += T_Elapsed;
     t.Interval =  1000;
     t.Start();


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    不好意思,是我自己的问题,跨线程了。

     private void T_Elapsed(object sender, ElapsedEventArgs e)
            {
                try
                {
                    tb1.Dispatcher.Invoke(new Action(delegate
                    {
                        i = i + 5;
                        tb1.SetValue(Canvas.LeftProperty, i);
                        if (i > gridMain.ActualWidth)
                        {
                            i = 0 - tb1.ActualWidth;
                        }
                    }));
                }
                catch (System.Exception ex)
                {
                }
            }
            double i = 0;

    • 已标记为答案 彭123 2016年12月26日 1:26
    2016年12月26日 1:26