2016-11-05 20 views
0

私はC#で新しく、私の問題に適した解決策を見つけることができません。 私はwpfの下で赤いサイレンの上に点滅する線を作ろうとしています。ボタンをクリックすると、描画された線が下の図のように毎秒点滅するはずです。赤いサイレンの上に点滅する線

Blinking lines over red siren

、コード下サイレン上に赤い線を描画するためのものです。 2.パラメータ(ブールa)は、タイマーによって線の可視性を変更することです。

// Below method is for drawing line and bool a parameter is for changing line visibility according to Mytimer_Tick. 
    public void DrawLine(Point[] points, bool a) 
    { 
     int i = 0; 
     int count = points.Length; 
      for (i = 0; i < count - 1; i += 2) 
      { 
     Line myline = new Line(); 
      myline.Stroke = Brushes.Red; 
      myline.StrokeThickness = 3; 
      myline.SnapsToDevicePixels = true; 
      myline.X1 = points[i].X; 
      myline.Y1 = points[i].Y; 
      myline.X2 = points[i + 1].X; 
      myline.Y2 = points[i + 1].Y; 
      Grid.Children.Add(myline); 

      if (a==true) 
      { 
       myline.Visibility = Visibility.Visible; 
      } 
      else 
      { 
       myline.Visibility = Visibility.Collapsed; 
      }   
     } 
    } 

以下の部分は1秒のタイムスパンを持つタイマーです。タイマーはボタンで始まります。また、以下の

// Timer with 1 sec. timespan. It's for making lines blink every second.  
    public void button_Click(object sender, RoutedEventArgs e) 
      { 
      DispatcherTimer mytimer = new DispatcherTimer(); 
       mytimer.Tick += Mytimer_Tick; 
       mytimer.Interval = new TimeSpan(0, 0, 1); 
       mytimer.Start(); }  

    private bool BlinkOn = true; 
    public void Mytimer_Tick(object sender, EventArgs e) 
    { 
     Point[] points = new Point[10] 
     { 
      new Point(100, 50), 
      new Point(100, 10), 

      new Point(115, 50), 
      new Point(145, 10), 

      new Point(125, 70), 
      new Point(185, 45), 

      new Point(85, 50), 
      new Point(55, 10), 

      new Point(75, 70), 
      new Point(25, 45), 
     }; 
     if(BlinkOn) 
     { 
      DrawLine(points, true); 
     } 
     else 
     { 
      DrawLine(points,false); 
     } 
     BlinkOn = !BlinkOn; 
     } 

はXAMLです:

<Window x:Class="try_out_blinking_lines.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:try_out_blinking_lines" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid x:Name="prid"> 
    <Grid x:Name="Grid" HorizontalAlignment="Left" Height="170" Margin="130,51,0,0" VerticalAlignment="Top" Width="206" RenderTransformOrigin="0.5,0.5"> 
     <Image x:Name="siren_r0_jpg" Margin="69,55,78,57" Source="siren_r0.jpg" Stretch="Fill"/> 
     <Border BorderThickness="2,2,2,2" BorderBrush="Green"></Border> 
    </Grid> 
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="201,261,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/> 

</Grid> 

そして結果:それは点滅しません。

誰かが助けてくれたら本当に感謝しています。 ありがとう、

答えて

0

この種の効果のためのタイマーは必要ありません。ただ、キャンバスに5行を入れて、DoubleAnimationによって、その不透明度をアニメーション化:

<Canvas> 
    <Canvas> 
     <Canvas.Triggers> 
      <EventTrigger RoutedEvent="Loaded"> 
       <BeginStoryboard> 
        <Storyboard Duration="0:0:2" RepeatBehavior="Forever"> 
         <DoubleAnimation Storyboard.TargetProperty="Opacity" 
             BeginTime="0:0:1" Duration="0:0:0" To="0"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Canvas.Triggers> 
     <Line X1="100" Y1="10" X2="100" Y2="50" Stroke="Red" StrokeThickness="3"/> 
     <Line X1="145" Y1="10" X2="115" Y2="50" Stroke="Red" StrokeThickness="3"/> 
     <Line X1="55" Y1="10" X2="85" Y2="50" Stroke="Red" StrokeThickness="3"/> 
     <Line X1="185" Y1="45" X2="125" Y2="70" Stroke="Red" StrokeThickness="3"/> 
     <Line X1="25" Y1="45" X2="75" Y2="70" Stroke="Red" StrokeThickness="3"/> 
    </Canvas> 
    <Image Source="siren_r0.jpg" 
      Width="50" Height="50" Canvas.Left="75" Canvas.Top="55"/> 
</Canvas> 

今、あなたはまた、

<Storyboard RepeatBehavior="Forever"> 
    <DoubleAnimation Storyboard.TargetProperty="Opacity" 
        Duration="0:0:0.5" To="0" AutoReverse="True"> 
     <DoubleAnimation.EasingFunction> 
      <CubicEase EasingMode="EaseOut"/> 
     </DoubleAnimation.EasingFunction> 
    </DoubleAnimation> 
</Storyboard> 
のように、継続的に不透明度をアニメーション化することにより、素敵な点滅効果のすべての種類を実装することができ
0

これで、すべてのタイマーティックでそれらを作成しているので、linesが多数作成されています。また、falseパラメータの追加された行は消去されません。

したがって、グリッドのLoadedイベントに行を作成してください。

そしてすべてのタイマーティックで、それらを表示/非表示にします。

さらに、ここではCanvasを使用しています。

関連する問題