Console.xaml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <UserControl x:Class="InABox.Wpf.Console.ConsoleControl"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:InABox.Wpf.Console"
  7. xmlns:wpf="clr-namespace:InABox.WPF"
  8. mc:Ignorable="d"
  9. x:Name="Window"
  10. DataContext="{Binding ElementName=Window}">
  11. <UserControl.Resources>
  12. <wpf:BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"
  13. TrueValue="Visible" FalseValue="Collapsed"/>
  14. <Style TargetType="ItemsControl" x:Key="LogViewerStyle">
  15. <Setter Property="Template">
  16. <Setter.Value>
  17. <ControlTemplate>
  18. <ScrollViewer CanContentScroll="True">
  19. <ItemsPresenter />
  20. </ScrollViewer>
  21. </ControlTemplate>
  22. </Setter.Value>
  23. </Setter>
  24. <Setter Property="ItemsPanel">
  25. <Setter.Value>
  26. <ItemsPanelTemplate>
  27. <VirtualizingStackPanel IsItemsHost="True" />
  28. </ItemsPanelTemplate>
  29. </Setter.Value>
  30. </Setter>
  31. </Style>
  32. <DataTemplate DataType="{x:Type local:LogEntry}">
  33. <Grid IsSharedSizeScope="True">
  34. <Grid.ColumnDefinitions>
  35. <ColumnDefinition SharedSizeGroup="Date" Width="120" />
  36. <ColumnDefinition SharedSizeGroup="Type" Width="60" />
  37. <ColumnDefinition SharedSizeGroup="User" Width="120" />
  38. <ColumnDefinition />
  39. </Grid.ColumnDefinitions>
  40. <TextBlock Text="{Binding DateTime}" Grid.Column="0" FontFamily="Courier New"
  41. Margin="5,0,5,0" />
  42. <TextBlock Text="{Binding Type}" Grid.Column="1" FontFamily="Courier New"
  43. Margin="5,0,5,0" />
  44. <TextBlock Text="{Binding User}" Grid.Column="2" FontFamily="Courier New"
  45. Margin="0,0,2,0" />
  46. <TextBlock Text="{Binding Message}" Grid.Column="3" FontFamily="Courier New"
  47. TextWrapping="Wrap" />
  48. </Grid>
  49. </DataTemplate>
  50. <DataTemplate DataType="{x:Type local:CollapsibleLogEntry}">
  51. <Grid IsSharedSizeScope="True">
  52. <Grid.ColumnDefinitions>
  53. <ColumnDefinition SharedSizeGroup="Date" Width="120" />
  54. <ColumnDefinition SharedSizeGroup="Type" Width="60" />
  55. <ColumnDefinition SharedSizeGroup="User" Width="120" />
  56. <ColumnDefinition />
  57. </Grid.ColumnDefinitions>
  58. <Grid.RowDefinitions>
  59. <RowDefinition Height="Auto" />
  60. <RowDefinition />
  61. </Grid.RowDefinitions>
  62. <TextBlock Text="{Binding DateTime}" Grid.Column="0" FontFamily="Courier New"
  63. Margin="5,0,5,0" />
  64. <TextBlock Text="{Binding Type}" Grid.Column="1" FontFamily="Courier New"
  65. Margin="5,0,5,0" />
  66. <TextBlock Text="{Binding User}" Grid.Column="2" FontFamily="Courier New"
  67. Margin="0,0,2,0" />
  68. <TextBlock Text="{Binding Message}" Grid.Column="3" FontFamily="Courier New"
  69. TextWrapping="Wrap" />
  70. <ToggleButton x:Name="Expander" Grid.Row="1" Grid.Column="0"
  71. VerticalAlignment="Top" Content="+" HorizontalAlignment="Right" />
  72. <ItemsControl ItemsSource="{Binding Contents}" Style="{StaticResource LogViewerStyle}"
  73. Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"
  74. x:Name="Contents" Visibility="Collapsed" />
  75. </Grid>
  76. <DataTemplate.Triggers>
  77. <Trigger SourceName="Expander" Property="IsChecked" Value="True">
  78. <Setter TargetName="Contents" Property="Visibility" Value="Visible" />
  79. <Setter TargetName="Expander" Property="Content" Value="-" />
  80. </Trigger>
  81. </DataTemplate.Triggers>
  82. </DataTemplate>
  83. </UserControl.Resources>
  84. <Grid>
  85. <Grid.RowDefinitions>
  86. <RowDefinition Height="Auto" />
  87. <RowDefinition Height="*" />
  88. <RowDefinition Height="Auto" />
  89. </Grid.RowDefinitions>
  90. <Grid>
  91. <Grid.RowDefinitions>
  92. <RowDefinition Height="Auto" />
  93. </Grid.RowDefinitions>
  94. <Grid.ColumnDefinitions>
  95. <ColumnDefinition Width="Auto" />
  96. <ColumnDefinition />
  97. <ColumnDefinition Width="Auto" />
  98. <ColumnDefinition Width="Auto" />
  99. <ColumnDefinition Width="Auto" />
  100. </Grid.ColumnDefinitions>
  101. <Label Content="Search" VerticalContentAlignment="Center" HorizontalAlignment="Left" />
  102. <TextBox x:Name="Search" Margin="5,0,0,0" DockPanel.Dock="Right" Background="LightYellow"
  103. VerticalContentAlignment="Center" PreviewKeyDown="Search_KeyDown" TextChanged="Search_TextChanged"
  104. HorizontalAlignment="Stretch" Grid.Column="1" />
  105. <CheckBox x:Name="UseRegEx" Content="Use Regular Expressions" HorizontalAlignment="Right"
  106. VerticalAlignment="Center" Visibility="Visible" Margin="5,0,5,0" Grid.Column="2"
  107. Checked="UseRegEx_Checked" Unchecked="UseRegEx_Unchecked" />
  108. <CheckBox x:Name="ShowImportant" Content="Show only Important" HorizontalAlignment="Right"
  109. VerticalAlignment="Center" Visibility="Visible" Margin="5,0,5,0" Grid.Column="3"
  110. Checked="ShowImportant_Checked" Unchecked="ShowImportant_Unchecked"/>
  111. <Button x:Name="LoadLog" Grid.Column="4" Content="Load Log File" Padding="4,1,4,1" Margin="5,5,5,5"
  112. Click="LoadLog_Click" Visibility="{Binding Path=ShowLoadLogButton,Mode=OneWay,Converter={StaticResource BoolToVisibilityConverter}}" />
  113. <Button x:Name="CloseLog" Grid.Column="4" Content="Close Log File" Padding="4,1,4,1" Margin="5,5,5,5"
  114. Click="CloseLog_Click" Visibility="{Binding Path=ShowCloseLogButton,Mode=OneWay,Converter={StaticResource BoolToVisibilityConverter}}" />
  115. </Grid>
  116. <Border x:Name="LogBorder" BorderBrush="Gray" Grid.Row="1" BorderThickness="0.75" Margin="5" Padding="2">
  117. <Border.Style>
  118. <Style TargetType="Border">
  119. <Setter Property="Background" Value="LightYellow"/>
  120. <Style.Triggers>
  121. <DataTrigger Binding="{Binding Enabled,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:ConsoleControl}}}" Value="False">
  122. <Setter Property="Background" Value="WhiteSmoke"/>
  123. </DataTrigger>
  124. </Style.Triggers>
  125. </Style>
  126. </Border.Style>
  127. <ItemsControl x:Name="Log" DataContext="{Binding Filtered}" ItemsSource="{Binding}" Style="{StaticResource LogViewerStyle}">
  128. <ItemsControl.Template>
  129. <ControlTemplate>
  130. <ScrollViewer CanContentScroll="True">
  131. <ItemsPresenter />
  132. </ScrollViewer>
  133. </ControlTemplate>
  134. </ItemsControl.Template>
  135. </ItemsControl>
  136. </Border>
  137. <Label x:Name="Error" Content="" Grid.Row="2" HorizontalAlignment="Right" Visibility="Collapsed" />
  138. </Grid>
  139. </UserControl>