537 lines
32 KiB
XML
537 lines
32 KiB
XML
<UserControl
|
|
x:Class="Plugin.Cowain.Wcs.Views.WcsRealStationView"
|
|
xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:controls="using:Plugin.Cowain.Wcs.Controls"
|
|
xmlns:conv="using:Cowain.Base.Converters"
|
|
xmlns:convWcs="using:Plugin.Cowain.Wcs.Converters"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:extensions="using:Cowain.Base.Extensions"
|
|
xmlns:helper="using:Cowain.Base.Helpers"
|
|
xmlns:i="using:Avalonia.Xaml.Interactivity"
|
|
xmlns:i18n="clr-namespace:Ke.Bee.Localization.Extensions;assembly=Ke.Bee.Localization"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:semi="https://irihi.tech/semi"
|
|
xmlns:u="https://irihi.tech/ursa"
|
|
xmlns:vm="using:Plugin.Cowain.Wcs.ViewModels"
|
|
d:DesignHeight="450"
|
|
d:DesignWidth="800"
|
|
mc:Ignorable="d">
|
|
<UserControl.Resources>
|
|
<conv:I18nLocalizeConverter x:Key="i18nConverter" />
|
|
<conv:MultiIdToPropertyConverter x:Key="IdToPropertyConverter" />
|
|
<conv:ListCountConverter x:Key="ListCountConverter" />
|
|
<convWcs:StationStatusBrushConverter x:Key="StationStatusBrushConverter" />
|
|
<convWcs:RgvArrowVisibleConverter x:Key="RgvArrowVisibleConverter" />
|
|
<convWcs:LayoutRowDefinitionsConverter x:Key="LayoutRowDefinitionsConverter" />
|
|
<convWcs:LayoutColumnDefinitionsConverter x:Key="LayoutColumnDefinitionsConverter" />
|
|
<convWcs:CellPosToCanvansPosConverter x:Key="CellPosToCanvansPosConverter" />
|
|
<helper:BindingProxy x:Key="Proxy" DataContext="{Binding}" />
|
|
|
|
|
|
</UserControl.Resources>
|
|
|
|
<UserControl.Styles>
|
|
<Style x:DataType="vm:RgvViewModel" Selector="ItemsControl > ContentPresenter">
|
|
<Setter Property="Canvas.Left" Value="{Binding LayOutX, Mode=OneWay, Converter={StaticResource CellPosToCanvansPosConverter}, ConverterParameter=130}" />
|
|
<Setter Property="Canvas.Top" Value="{Binding LayOutY, Mode=OneWay, Converter={StaticResource CellPosToCanvansPosConverter}, ConverterParameter=60}" />
|
|
<Setter Property="ZIndex" Value="10" />
|
|
<Setter Property="Transitions">
|
|
<Transitions>
|
|
<DoubleTransition
|
|
Easing="CubicEaseOut"
|
|
Property="Canvas.Left"
|
|
Duration="0:0:2" />
|
|
<DoubleTransition
|
|
Easing="CubicEaseOut"
|
|
Property="Canvas.Top"
|
|
Duration="0:0:2" />
|
|
</Transitions>
|
|
</Setter>
|
|
</Style>
|
|
<Style x:DataType="vm:StationViewModel" Selector="ItemsControl > ContentPresenter">
|
|
<Setter Property="Canvas.Left" Value="{Binding LayOutX, Mode=OneWay, Converter={StaticResource CellPosToCanvansPosConverter}, ConverterParameter=130}" />
|
|
<Setter Property="Canvas.Top" Value="{Binding LayOutY, Mode=OneWay, Converter={StaticResource CellPosToCanvansPosConverter}, ConverterParameter=60}" />
|
|
</Style>
|
|
</UserControl.Styles>
|
|
|
|
<Grid Margin="8">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Spacing="10">
|
|
<TextBlock
|
|
Margin="4,4,0,10"
|
|
Classes="H4"
|
|
Text="{i18n:Localize WcsRealStation.TaskList}"
|
|
Theme="{StaticResource TitleTextBlock}" />
|
|
</StackPanel>
|
|
|
|
<Grid Margin="6">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="120" />
|
|
<ColumnDefinition Width="100" />
|
|
<ColumnDefinition Width="80" />
|
|
<ColumnDefinition Width="80" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0" Text="{i18n:Localize WcsTaskList.DataGrid.Id}" />
|
|
<TextBlock Grid.Column="1" Text="{i18n:Localize WcsTaskList.DataGrid.IsFinished}" />
|
|
<TextBlock Grid.Column="2" Text="{i18n:Localize WcsTaskList.DataGrid.ProcessName}" />
|
|
<TextBlock Grid.Column="3" Text="{i18n:Localize WcsTaskList.DataGrid.Priority}" />
|
|
<TextBlock Grid.Column="4" Text="{i18n:Localize WcsTaskList.DataGrid.ExecuteAction}" />
|
|
<TextBlock Grid.Column="5" Text="{i18n:Localize WcsTaskList.DataGrid.FromStation1}" />
|
|
<TextBlock Grid.Column="6" Text="{i18n:Localize WcsTaskList.DataGrid.ToStation1}" />
|
|
<TextBlock Grid.Column="7" Text="{i18n:Localize WcsTaskList.DataGrid.FromStation2}" />
|
|
<TextBlock Grid.Column="8" Text="{i18n:Localize WcsTaskList.DataGrid.ToStation2}" />
|
|
</Grid>
|
|
<ItemsControl ItemsSource="{Binding TaskList}">
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate x:DataType="vm:TaskViewModel">
|
|
<Grid Margin="6">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="120" />
|
|
<ColumnDefinition Width="100" />
|
|
<ColumnDefinition Width="80" />
|
|
<ColumnDefinition Width="80" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="180" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<TextBlock Grid.Column="0" Text="{Binding Id}" />
|
|
<TextBlock Grid.Column="1" Text="{Binding IsFinished, Converter={StaticResource i18nConverter}, ConverterParameter='WcsTaskList'}" />
|
|
<TextBlock Grid.Column="2" Text="{Binding ProcessName}" />
|
|
<TextBlock Grid.Column="3" Text="{Binding Priority}" />
|
|
<StackPanel
|
|
Grid.Column="4"
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ExecuteAction" />
|
|
<Binding Path="Actions" />
|
|
<Binding Source="Name" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
|
|
<StackPanel
|
|
Grid.Column="5"
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="FromStationId1" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text=":" />
|
|
<TextBlock Foreground="Red">
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="FromStationId1" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationCode" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
<StackPanel
|
|
Grid.Column="6"
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ToStationId1" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text=":" />
|
|
<TextBlock Foreground="Red">
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ToStationId1" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationCode" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
|
|
<StackPanel
|
|
Grid.Column="7"
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="FromStationId2" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text=":" />
|
|
<TextBlock Foreground="Red">
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="FromStationId2" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationCode" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
<StackPanel
|
|
Grid.Column="8"
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ToStationId2" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text=":" />
|
|
<TextBlock Foreground="Red">
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ToStationId2" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationCode" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
|
|
|
|
</Grid>
|
|
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</StackPanel>
|
|
<Grid Grid.Row="1" RowDefinitions="Auto,*">
|
|
|
|
<StackPanel
|
|
Margin="0,10,0,10"
|
|
Orientation="Horizontal"
|
|
Spacing="10">
|
|
<TextBlock
|
|
Classes="H4"
|
|
Text="{i18n:Localize WcsRealStation.StationStatus}"
|
|
Theme="{StaticResource TitleTextBlock}" />
|
|
<TextBlock VerticalAlignment="Center" Text="{i18n:Localize WcsRealStation.StationStatus.Tips}" />
|
|
<TextBlock VerticalAlignment="Center" Text=":" />
|
|
<StackPanel
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="8">
|
|
<Border
|
|
Width="24"
|
|
Height="24"
|
|
Background="Orange"
|
|
BorderBrush="Gray"
|
|
BorderThickness="1" />
|
|
<TextBlock VerticalAlignment="Center" Text="{i18n:Localize StationState.RequestPick}" />
|
|
<Border
|
|
Width="24"
|
|
Height="24"
|
|
Background="OrangeRed"
|
|
BorderBrush="Gray"
|
|
BorderThickness="1" />
|
|
<TextBlock VerticalAlignment="Center" Text="{i18n:Localize StationState.RequestPlace}" />
|
|
<Border
|
|
Width="24"
|
|
Height="24"
|
|
Background="Yellow"
|
|
BorderBrush="Gray"
|
|
BorderThickness="1" />
|
|
<TextBlock VerticalAlignment="Center">
|
|
<Run Text="{i18n:Localize StationState.Picking}" />
|
|
<Run>/</Run>
|
|
<Run Text="{i18n:Localize StationState.Placing}" />
|
|
</TextBlock>
|
|
<Border
|
|
Width="24"
|
|
Height="24"
|
|
Background="LightGreen"
|
|
BorderBrush="Gray"
|
|
BorderThickness="1" />
|
|
<TextBlock VerticalAlignment="Center">
|
|
<Run Text="{i18n:Localize StationState.PickFinished}" />
|
|
<Run>/</Run>
|
|
<Run Text="{i18n:Localize StationState.PlaceFinished}" />
|
|
</TextBlock>
|
|
<Border
|
|
Width="24"
|
|
Height="24"
|
|
Background="Gray"
|
|
BorderBrush="Gray"
|
|
BorderThickness="1" />
|
|
<TextBlock VerticalAlignment="Center" Text="{i18n:Localize StationState.UnKnown}" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
<ScrollViewer
|
|
Grid.Row="1"
|
|
HorizontalScrollBarVisibility="Auto"
|
|
VerticalScrollBarVisibility="Auto">
|
|
<ItemsControl
|
|
HorizontalAlignment="Left"
|
|
VerticalAlignment="Top"
|
|
ItemsSource="{Binding LayoutList}">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<Canvas Width="{Binding Width}" Height="{Binding Height}" />
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.DataTemplates>
|
|
<DataTemplate DataType="{x:Type vm:StationViewModel}">
|
|
<Border
|
|
Width="120"
|
|
Height="50"
|
|
Margin="5"
|
|
Background="{Binding Status, Converter={StaticResource StationStatusBrushConverter}}"
|
|
BorderBrush="{StaticResource SemiGreen4}"
|
|
BorderThickness="2"
|
|
CornerRadius="5"
|
|
Opacity="0.8">
|
|
<StackPanel Margin="5" Spacing="5">
|
|
<StackPanel
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock>
|
|
<Run Foreground="Black" Text="{Binding StationName}" />
|
|
<Run Foreground="Black">:</Run>
|
|
<Run Foreground="Black" Text="{Binding StationCode}" />
|
|
</TextBlock>
|
|
</StackPanel>
|
|
<StackPanel
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal"
|
|
Spacing="2">
|
|
<TextBlock Foreground="Black" Text="{Binding ProcessName}" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
<ToolTip.Tip>
|
|
<StackPanel>
|
|
<DockPanel Margin="0,2,0,0" LastChildFill="True">
|
|
<TextBlock MinWidth="100" DockPanel.Dock="Left">
|
|
<Run Text="{i18n:Localize StationManagement.DataGrid.Process}" />
|
|
<Run>:</Run>
|
|
</TextBlock>
|
|
<TextBlock Text="{Binding ProcessName}" />
|
|
</DockPanel>
|
|
<DockPanel Margin="0,2,0,0" LastChildFill="True">
|
|
<TextBlock MinWidth="100" DockPanel.Dock="Left">
|
|
<Run Text="{i18n:Localize StationManagement.DataGrid.QrCode}" />
|
|
<Run>:</Run>
|
|
</TextBlock>
|
|
<TextBlock Text="{Binding QrCode}" />
|
|
</DockPanel>
|
|
<DockPanel Margin="0,2,0,0" LastChildFill="True">
|
|
<TextBlock MinWidth="100" DockPanel.Dock="Left">
|
|
<Run Text="{i18n:Localize StationManagement.DataGrid.StationStatus}" />
|
|
<Run>:</Run>
|
|
</TextBlock>
|
|
<TextBlock Text="{Binding Status, Converter={StaticResource i18nConverter}, ConverterParameter='StationState'}" />
|
|
</DockPanel>
|
|
<DockPanel Margin="0,2,0,0" LastChildFill="True">
|
|
<TextBlock MinWidth="100" DockPanel.Dock="Left">
|
|
<Run Text="{i18n:Localize StationManagement.DataGrid.UpdateTime}" />
|
|
<Run>:</Run>
|
|
</TextBlock>
|
|
<TextBlock Text="{Binding UpdateTime}" />
|
|
</DockPanel>
|
|
</StackPanel>
|
|
</ToolTip.Tip>
|
|
</Border>
|
|
</DataTemplate>
|
|
<DataTemplate DataType="{x:Type vm:RgvViewModel}">
|
|
<Grid Margin="5">
|
|
<!-- 箭头装饰器... -->
|
|
<controls:RgvArrowDecorator
|
|
ArrowBrush="Red"
|
|
ArrowDirection="True"
|
|
ArrowEndCanvasPoint="{Binding FromStationPoint1}"
|
|
IsVisible="{Binding FromStationId1, Converter={StaticResource RgvArrowVisibleConverter}}" />
|
|
<controls:RgvArrowDecorator
|
|
ArrowBrush="Red"
|
|
ArrowDirection="False"
|
|
ArrowEndCanvasPoint="{Binding ToStationPoint1}"
|
|
IsVisible="{Binding ToStationId1, Converter={StaticResource RgvArrowVisibleConverter}}" />
|
|
<controls:RgvArrowDecorator
|
|
ArrowBrush="Green"
|
|
ArrowDirection="True"
|
|
ArrowEndCanvasPoint="{Binding FromStationPoint2}"
|
|
IsVisible="{Binding FromStationId2, Converter={StaticResource RgvArrowVisibleConverter}}" />
|
|
<controls:RgvArrowDecorator
|
|
ArrowBrush="Green"
|
|
ArrowDirection="False"
|
|
ArrowEndCanvasPoint="{Binding ToStationPoint2}"
|
|
IsVisible="{Binding ToStationId2, Converter={StaticResource RgvArrowVisibleConverter}}" />
|
|
<!-- 小车本体 -->
|
|
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
|
<!-- 上方三角形 -->
|
|
<Polygon
|
|
Width="120"
|
|
Height="8"
|
|
Margin="0,0,0,2"
|
|
HorizontalAlignment="Center"
|
|
Fill="Black"
|
|
Points="60,0 50,8 70,8">
|
|
<Polygon.Styles>
|
|
<Style Selector="Polygon">
|
|
<Style.Animations>
|
|
<Animation IterationCount="Infinite" Duration="0:0:1">
|
|
<KeyFrame Cue="0%">
|
|
<Setter Property="Opacity" Value="0.0" />
|
|
</KeyFrame>
|
|
<KeyFrame Cue="100%">
|
|
<Setter Property="Opacity" Value="0.5" />
|
|
</KeyFrame>
|
|
</Animation>
|
|
</Style.Animations>
|
|
</Style>
|
|
</Polygon.Styles>
|
|
</Polygon>
|
|
<!-- 小车矩形 -->
|
|
<Border
|
|
Width="120"
|
|
Height="30"
|
|
CornerRadius="10"
|
|
Opacity="0.8">
|
|
<Border.Background>
|
|
<LinearGradientBrush StartPoint="50%,0%" EndPoint="50%,100%">
|
|
<GradientStop Offset="0.0" Color="#A8E6CF" />
|
|
<GradientStop Offset="0.5" Color="#3D84A8" />
|
|
<GradientStop Offset="1.0" Color="#46CDCF" />
|
|
</LinearGradientBrush>
|
|
</Border.Background>
|
|
<TextBlock
|
|
HorizontalAlignment="Center"
|
|
VerticalAlignment="Center"
|
|
Foreground="Black"
|
|
Text="{Binding StationName}"
|
|
TextAlignment="Center" />
|
|
<ToolTip.Tip>
|
|
<StackPanel>
|
|
<TextBlock
|
|
Margin="0,0,0,4"
|
|
FontWeight="Bold"
|
|
Text="{i18n:Localize WcsRealStation.Title.RgvToolTip}" />
|
|
<DockPanel Margin="0,2,0,0" LastChildFill="True">
|
|
<TextBlock
|
|
MinWidth="40"
|
|
DockPanel.Dock="Left"
|
|
Text="1: " />
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="FromStationId1" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text=" -> " />
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ToStationId1" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DockPanel>
|
|
<DockPanel Margin="0,2,0,0" LastChildFill="True">
|
|
<TextBlock
|
|
MinWidth="40"
|
|
DockPanel.Dock="Left"
|
|
Text="2: " />
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="FromStationId2" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text=" -> " />
|
|
<TextBlock>
|
|
<TextBlock.Text>
|
|
<MultiBinding Converter="{StaticResource IdToPropertyConverter}">
|
|
<Binding Path="ToStationId2" />
|
|
<Binding Path="DataContext.Stations" Source="{StaticResource Proxy}" />
|
|
<Binding Source="StationName" />
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DockPanel>
|
|
|
|
</StackPanel>
|
|
</ToolTip.Tip>
|
|
|
|
</Border>
|
|
|
|
<!-- 下方三角形 -->
|
|
<Polygon
|
|
Width="120"
|
|
Height="8"
|
|
Margin="0,2,0,0"
|
|
HorizontalAlignment="Center"
|
|
Fill="Black"
|
|
Points="60,8 50,0 70,0">
|
|
<Polygon.Styles>
|
|
<Style Selector="Polygon">
|
|
<Style.Animations>
|
|
<Animation IterationCount="Infinite" Duration="0:0:1">
|
|
<KeyFrame Cue="0%">
|
|
<Setter Property="Opacity" Value="0.0" />
|
|
</KeyFrame>
|
|
<KeyFrame Cue="100%">
|
|
<Setter Property="Opacity" Value="0.5" />
|
|
</KeyFrame>
|
|
</Animation>
|
|
</Style.Animations>
|
|
</Style>
|
|
</Polygon.Styles>
|
|
</Polygon>
|
|
</StackPanel>
|
|
</Grid>
|
|
</DataTemplate>
|
|
</ItemsControl.DataTemplates>
|
|
|
|
</ItemsControl>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</Grid>
|
|
</UserControl> |