Multiprocotol Terminalprogram (BAT)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
14 KiB

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MultiTerm.Wpf.CustomControl"
xmlns:vm="clr-namespace:MultiTerm.Core.ViewModel;assembly=MultiTerm.Core"
xmlns:wpftk="clr-namespace:WpfToolkit.Controls;assembly=VirtualizingWrapPanel"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style TargetType="{x:Type local:MultiFormatDataView}">
<Style.Resources>
<SolidColorBrush x:Key="CHAR_Background" Color="#B4FFFF"/>
<SolidColorBrush x:Key="HEX_Background" Color="#C8C8FF"/>
<SolidColorBrush x:Key="BIN_Background" Color="#B4FFB4"/>
<DataTemplate x:Key="dataContainerTemplate" DataType="vm:DataViewModel">
<DataTemplate.Resources>
<!-- Styling for all labels (data items) -->
<Style TargetType="Label">
<Setter Property="FontFamily" Value="Consolas"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="ExtraLight"/>
</Style>
</DataTemplate.Resources>
<StackPanel Orientation="Vertical" Margin="0" x:Name="ItemStackPanel">
<StackPanel.Triggers>
<EventTrigger SourceName="ItemStackPanel" RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ItemStackPanel"
Storyboard.TargetProperty="(local:MultiFormatDataView.ItemLoaded)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>True</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger SourceName="ItemStackPanel" RoutedEvent="Unloaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ItemStackPanel"
Storyboard.TargetProperty="(local:MultiFormatDataView.ItemUnloaded)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>True</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</StackPanel.Triggers>
<!-- Character -->
<Border BorderThickness="0">
<Label Content="{Binding DisplayStringUtf16}" Padding="0" Margin="2 0" VerticalAlignment="Center">
<Label.Style>
<Style TargetType="Label">
<Setter Property="HorizontalAlignment" Value="Left"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbHex,Path=IsChecked}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=cbBin,Path=IsChecked}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbCharacter,Path=IsChecked}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=cbHex,Path=IsChecked}" Value="True">
<Setter Property="Background" Value="{StaticResource CHAR_Background}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=cbBin,Path=IsChecked}" Value="True">
<Setter Property="Background" Value="{StaticResource CHAR_Background}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<!-- Hexadecimal -->
<Border BorderThickness="0" Background="{StaticResource HEX_Background}">
<Label Content="{Binding DisplayStringHex}" HorizontalAlignment="Right" VerticalAlignment="Center" Padding="0" Margin="2 0"/>
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbHex,Path=IsChecked}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<!-- Binary -->
<Border BorderThickness="0" Background="{StaticResource BIN_Background}">
<Label Content="{Binding DisplayStringBin}" HorizontalAlignment="Right" VerticalAlignment="Center" Padding="0" Margin="2"/>
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbBin,Path=IsChecked}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</StackPanel>
</DataTemplate>
</Style.Resources>
<!-- Template -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MultiFormatDataView}">
<DockPanel>
<GroupBox Header="Display Formats" DockPanel.Dock="Top">
<!-- Top row with options and buttons -->
<DockPanel LastChildFill="True">
<!-- Format selectors -->
<CheckBox DockPanel.Dock="Left" Content="Character" VerticalAlignment="Center" x:Name="cbCharacter" Padding="20 0" IsChecked="True"/>
<CheckBox DockPanel.Dock="Left" Content="Hexadecimal" VerticalAlignment="Center" x:Name="cbHex" Padding="20 0"/>
<CheckBox DockPanel.Dock="Left" Content="Binary" VerticalAlignment="Center" x:Name="cbBin" Padding="20 0"/>
<!-- Clear Button -->
<Button DockPanel.Dock="Right" x:Name="btnClear" Content="Clear" Margin="2" />
<!-- ComboBox -->
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" >
<Label Content="{TemplateBinding SelectorDescription}" VerticalAlignment="Center" Margin="0 0 5 0"/>
<!-- ComboBox using "two way TemplateBinding" for SelectedItem -->
<ComboBox x:Name="comboBoxSelector"
ItemsSource="{TemplateBinding SelectorItemsSource}"
SelectedItem="{Binding Path=SelectorSelectedItem, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
VerticalAlignment="Center" Width="80"/>
</StackPanel>
</DockPanel>
</GroupBox>
<!-- Grid that contains main control and a realited items count on top -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Main Items Control -->
<ListView Name="itemsControl"
Grid.Column="0" Grid.Row="0" Grid.RowSpan="2"
ItemsSource="{TemplateBinding DataSource}"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="true"
ScrollViewer.PanningMode="VerticalOnly"
HorizontalAlignment="Left"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingPanel.CacheLengthUnit="Item"
VirtualizingPanel.VirtualizationMode="Standard"
ItemTemplate="{StaticResource dataContainerTemplate}"
SelectionMode="Extended">
<!-- TEMP possible starting point for multiple boxes per item -->
<!--<ListView.ItemTemplate>
<DataTemplate>
<UniformGrid Rows="1" IsItemsHost="True">
<UniformGrid.Style>
<StaticResource ResourceKey="dataContainerTemplate"/>
</UniformGrid.Style>
</UniformGrid>
</DataTemplate>
</ListView.ItemTemplate>-->
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="Margin" Value="0"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<wpftk:VirtualizingWrapPanel Orientation="Vertical" SpacingMode="Uniform" StretchItems="True"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Separator Height="0"></Separator>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
<!-- Realized Items Display (on top of ListView because if comes later in the list) -->
<StackPanel Grid.Column="0" Grid.Row="0" Margin="5 5 25 5" Grid.ZIndex="1" Background="Azure"
Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Right">
<Label Content="Realized Items: " Margin="0 0 5 0"/>
<Label Width="30" Content="{TemplateBinding RealizedItemsCount}"/>
</StackPanel>
</Grid>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>