livia-test/Livia/Views/Controls/RoiExpanderControl.xaml
2025-03-28 14:31:53 +08:00

219 lines
14 KiB
XML

<UserControl x:Class="Livia.Views.Controls.RoiExpanderControl"
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:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:viewModels="clr-namespace:Livia.ViewModels"
xmlns:attachedProperties="clr-namespace:Livia.Views.AttachedProperties"
xmlns:converters="clr-namespace:Livia.Views.Converters"
xmlns:controls="clr-namespace:Livia.Views.Controls"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:RoiExpanderControlViewModel}"
d:DesignWidth="800"
d:DesignHeight="1500"
d:Background="{StaticResource PrimaryColorBrush}">
<UserControl.Resources>
<converters:RoiTwoColumnModeToStringConverter x:Key="RoiTwoColumnModeToStringConverter" />
<converters:UnfoldButtonStateToStringConverter x:Key="UnfoldButtonStateToStringConverter" />
<converters:RoiLocationDisplayModeToStringConverter x:Key="RoiLocationDisplayModeToStringConverter" />
<converters:InverseBooleanToVisibilityCollapsedConverter x:Key="InverseBooleanToVisibilityCollapsedConverter" />
<converters:NullableToVisibilityCollapsedConverter x:Key="NullableToVisibilityCollapsedConverter" />
</UserControl.Resources>
<StackPanel VerticalAlignment="Top">
<Expander HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Style="{StaticResource MaterialDesignExpander}"
Margin="20, 0, 0, 0"
Foreground="{StaticResource PrimaryTextColorBrush}"
Background="Transparent">
<Expander.Header>
<Border BorderBrush="{StaticResource PrimaryTextColorBrush}"
HorizontalAlignment="Stretch"
BorderThickness="1">
<DockPanel Margin="16, 0">
<StackPanel DockPanel.Dock="Left"
Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}"
d:IsChecked="False"
Background="{StaticResource PrimaryTextColorBrush}" />
<Ellipse Fill="{Binding Color}"
Margin="5, 0"
Height="8"
Width="8" />
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
Text="{Binding Name}"
d:Text="左侧A区" />
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
DockPanel.Dock="Right"
HorizontalAlignment="Right"
Text="{Binding Volume, StringFormat={}{0:N3}ml}"
d:Text="9.851" />
</DockPanel>
</Border>
</Expander.Header>
<StackPanel>
<StackPanel Orientation="Vertical"
VerticalAlignment="Top"
Margin="25, 0, 65, 0">
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
Margin="30, 0, 0, 0"
Text="{StaticResource NoRoiLocationDataMessage}"
Visibility="{Binding NoLocationData, Converter={StaticResource BooleanToVisibilityConverter}}" />
<DockPanel>
<StackPanel Orientation="Horizontal"
Visibility="{Binding ShowButtons, Converter={StaticResource BooleanToVisibilityConverter}}"
DockPanel.Dock="Left">
<Button Style="{StaticResource LiviaPrimaryIconButton}"
Margin="5, 0"
Click="LocateRoiButtonOnClick"
Visibility="{Binding MaskImageSeries.MaskJumpToIndex, Converter={StaticResource NullableToVisibilityCollapsedConverter}}"
HorizontalAlignment="Right"
attachedProperties:IconKindProperties.IconKind="CrosshairsGps"
ToolTip="{StaticResource LocateRoiButtonText}">
</Button>
<Button Style="{StaticResource LiviaPrimaryIconButton}"
Margin="5, 0"
Click="ShowBoundaryButtonOnClick"
Visibility="{Binding MaskImageSeries.MaskJumpToIndex, Converter={StaticResource NullableToVisibilityCollapsedConverter}}"
HorizontalAlignment="Right"
attachedProperties:IconKindProperties.IconKind="HeadOutline"
ToolTip="{StaticResource ShowBoundaryButtonText}">
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal"
DockPanel.Dock="Right"
Visibility="{Binding ShowButtons, Converter={StaticResource BooleanToVisibilityConverter}}"
HorizontalAlignment="Right">
<Button Style="{StaticResource LiviaPrimaryTextIconButton}"
Margin="5, 0"
Click="ToggleUnfoldButtonOnClick"
HorizontalAlignment="Right"
attachedProperties:IconKindProperties.IconKind="UnfoldMoreVertical"
attachedProperties:StringItemProperties.ItemName="{Binding UnfoldButtonState, Converter={StaticResource UnfoldButtonStateToStringConverter} }" />
<Button Style="{StaticResource LiviaPrimaryTextIconButton}"
Visibility="{Binding IsTwoSided, Converter={StaticResource BooleanToVisibilityConverter}}"
Margin="5, 0"
Click="ToggleTwoColumnModeButtonOnClick"
HorizontalAlignment="Right"
attachedProperties:IconKindProperties.IconKind="ViewColumn"
attachedProperties:StringItemProperties.ItemName="{Binding TwoColumnMode, Converter={StaticResource RoiTwoColumnModeToStringConverter} }" />
<Button Style="{StaticResource LiviaPrimaryTextIconButton}"
Margin="5, 0"
Click="ToggleRoiLocationDisplayModeButtonOnClick"
HorizontalAlignment="Right"
attachedProperties:IconKindProperties.IconKind="SwapHorizontal"
attachedProperties:StringItemProperties.ItemName="{Binding CurrentRoiLocationDisplayMode, Converter={StaticResource RoiLocationDisplayModeToStringConverter} }" />
</StackPanel>
</DockPanel>
<ItemsControl d:Visibility="Collapsed"
ItemsSource="{Binding Locations}"
Visibility="{Binding TwoColumnMode, Converter={StaticResource InverseBooleanToVisibilityCollapsedConverter}}"
ScrollViewer.CanContentScroll="True"
VerticalAlignment="Top"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:RoiLocationDataControl DataContext="{Binding }" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Grid d:Visibility="Collapsed"
Visibility="{Binding TwoColumnMode, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.Row="0"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Text="{StaticResource Left}"
HorizontalAlignment="Stretch"
TextAlignment="Center"
Foreground="{StaticResource PrimaryTextColorBrush}"
Background="{StaticResource CalendarBackground}" />
<TextBlock Grid.Column="1"
Grid.Row="0"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Text="{StaticResource BothSides}"
HorizontalAlignment="Stretch"
TextAlignment="Center"
Foreground="{StaticResource PrimaryTextColorBrush}"
Background="{StaticResource CalendarBackground}" />
<TextBlock Grid.Column="2"
Grid.Row="0"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Text="{StaticResource Right}"
HorizontalAlignment="Stretch"
TextAlignment="Center"
Foreground="{StaticResource PrimaryTextColorBrush}"
Background="{StaticResource CalendarBackground}" />
<Grid Grid.Column="0"
Grid.Row="1"
Margin="0, 0, 15, 0">
<ItemsControl ItemsSource="{Binding LeftLocations}"
d:ItemsSource="{d:SampleData}"
ScrollViewer.CanContentScroll="True"
VerticalAlignment="Top"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:RoiLocationDataControl DataContext="{Binding }" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
<Grid Grid.Column="1"
Grid.Row="1"
Margin="15,0">
<ItemsControl ItemsSource="{Binding TwoSideLocations}"
d:ItemsSource="{d:SampleData}"
ScrollViewer.CanContentScroll="True"
VerticalAlignment="Top"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:RoiLocationDataControl DataContext="{Binding }" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
<Grid Grid.Column="2"
Grid.Row="1"
Margin="15, 0, 0, 0">
<ItemsControl ItemsSource="{Binding RightLocations}"
d:ItemsSource="{d:SampleData}"
ScrollViewer.CanContentScroll="True"
VerticalAlignment="Top"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:RoiLocationDataControl DataContext="{Binding }" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Grid>
</StackPanel>
<StackPanel d:Visibility="Collapsed">
<ItemsControl ItemsSource="{Binding SubGroups}"
ScrollViewer.CanContentScroll="True"
VerticalAlignment="Top"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:RoiExpanderGroupControl DataContext="{Binding }" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</StackPanel>
</Expander>
</StackPanel>
</UserControl>