<UserControl x:Class="Aitex.Core.UI.Control.FlowPipe"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:ctrl="clr-namespace:Aitex.Core.Util"
             Name="flowPipeControl" Width="100" Height="8">
    <UserControl.RenderTransform>
        <RotateTransform Angle="0" x:Name="rotateTransform"/>
    </UserControl.RenderTransform>
        <Canvas MinHeight="4" MinWidth="100">
        <Canvas.Resources>
            <Style x:Key="AnimatingFlow" TargetType="{x:Type Path}">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition  Value="true" >
                                <Condition.Binding>
                                    <MultiBinding>
                                        <MultiBinding.Converter>
                                            <ctrl:FlowConverterForAllTrueMultiBinding></ctrl:FlowConverterForAllTrueMultiBinding>
                                        </MultiBinding.Converter>
                                        <MultiBinding.Bindings>
                                            <Binding Path="IsFlowing.Feedback" ElementName="flowPipeControl"></Binding>
                                            <Binding Path="IsSlowFlowing.Feedback" ElementName="flowPipeControl"></Binding>
                                        </MultiBinding.Bindings>
                                    </MultiBinding>
                                </Condition.Binding>
                            </Condition>
                            <Condition Binding="{Binding ElementName=flowPipeControl, Path=IsReverse}" Value="true" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.EnterActions>
                            <BeginStoryboard Name="FlowStoryboard">
                                <Storyboard RepeatBehavior="Forever" Timeline.DesiredFrameRate="10">
                                    <!--<Gas flows from right to left or bottom to top>-->
                                    <DoubleAnimation Storyboard.TargetProperty="StrokeDashOffset" Duration="0:0:10" By="70" />
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.EnterActions>
                        <MultiDataTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard FillBehavior="Stop">
                                    <DoubleAnimation Storyboard.TargetProperty="StrokeDashOffset" Duration="0" />
                                </Storyboard>
                            </BeginStoryboard>
                            <StopStoryboard BeginStoryboardName="FlowStoryboard" />
                        </MultiDataTrigger.ExitActions>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition  Value="true" >
                                <Condition.Binding>
                                    <MultiBinding>
                                        <MultiBinding.Converter>
                                            <ctrl:FlowConverterForAllTrueMultiBinding></ctrl:FlowConverterForAllTrueMultiBinding>
                                        </MultiBinding.Converter>
                                        <MultiBinding.Bindings>
                                            <Binding Path="IsFlowing.Feedback" ElementName="flowPipeControl"></Binding>
                                            <Binding Path="IsSlowFlowing.Feedback" ElementName="flowPipeControl"></Binding>
                                        </MultiBinding.Bindings>
                                    </MultiBinding>
                                </Condition.Binding>
                            </Condition>
                            <Condition Binding="{Binding ElementName=flowPipeControl, Path=IsReverse}" Value="false" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.EnterActions>
                            <BeginStoryboard Name="ReverseFlowStoryboard">
                                <Storyboard RepeatBehavior="Forever" Timeline.DesiredFrameRate="10">
                                    <!--<Gas flows from left to right or top to bottom>-->
                                    <DoubleAnimation Storyboard.TargetProperty="StrokeDashOffset" Duration="0:0:10" By="-70" />
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.EnterActions>
                        <MultiDataTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard FillBehavior="Stop">
                                    <DoubleAnimation Storyboard.TargetProperty="StrokeDashOffset" Duration="0" />
                                </Storyboard>
                            </BeginStoryboard>
                            <StopStoryboard BeginStoryboardName="ReverseFlowStoryboard" />
                        </MultiDataTrigger.ExitActions>
                    </MultiDataTrigger>                
                </Style.Triggers>
            </Style>
        </Canvas.Resources>
        <Path Name="path1" Fill="Red" Stretch="Fill" 
              Width="{Binding ElementName=flowPipeControl,Path=Width}" 
              Height="{Binding ElementName=flowPipeControl,Path=Height}" 
              Stroke="Green" StrokeDashArray="1,3" StrokeDashCap="Round" StrokeThickness="5"
              Style="{StaticResource AnimatingFlow}">
            <Path.Data>
                <PathGeometry>
                    <PathGeometry.Figures>
                        <PathFigureCollection>
                            <PathFigure StartPoint="0,0">
                                <PathFigure.Segments>
                                    <LineSegment Point="80,0" />
                                </PathFigure.Segments>
                            </PathFigure>
                        </PathFigureCollection>
                    </PathGeometry.Figures>
                </PathGeometry>
            </Path.Data>
        </Path>

        <Border   x:Name="border1"    CornerRadius="1"  BorderBrush="Gray"  BorderThickness="1" Opacity="0.5" 
                  Width="{Binding ElementName=flowPipeControl,Path=Width}" Height="{Binding ElementName=flowPipeControl,Path=Height}">
            <Border.Background>
                <LinearGradientBrush StartPoint="0.5 0" EndPoint="0.5 1">
                    <GradientStop Color="Gray" Offset="0"/>
                    <GradientStop Color="White" Offset="0.5"/>
                    <GradientStop Color="Gray" Offset="1"/>
                </LinearGradientBrush>
            </Border.Background>
        </Border>
    </Canvas>
</UserControl>
