Sic.Framework/MECF.Framework.UI.Core/Control/FlowPipe.xaml

117 lines
6.9 KiB
XML

<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>