<Window x:Class="EonaCat.PortMonitor.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="EonaCat Port Monitor" Height="600" Width="1500" WindowStartupLocation="CenterScreen"> <Window.Resources> <ResourceDictionary Source="/Themes.xaml" /> </Window.Resources> <Grid Background="{DynamicResource DynamicBackgroundColor}"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <!-- Define a Grid inside the first Row (to contain the StackPanel and the button) --> <Grid Grid.Row="0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <!-- Flexible space --> <ColumnDefinition Width="Auto" /> <!-- Fixed width for the button --> </Grid.ColumnDefinitions> <!-- Filter and other elements go in the first column --> <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="10"> <TextBlock Text="Filter by Keyword:" VerticalAlignment="Center" Margin="5" /> <TextBox Name="KeywordFilter" Width="200" Margin="5" KeyUp="FilterConnections_KeyUp"/> </StackPanel> <!-- Theme switch button goes in the second column (aligned to the right) --> <Button x:Name="btnTheme" Content="🌙" Width="40" Height="30" Margin="10,0" VerticalAlignment="Center" Grid.Column="1" Click="btnTheme_Click" /> </Grid> <!-- Network Statistics Section --> <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="10"> <TextBlock Name="TcpUdpStatsText" VerticalAlignment="Center" FontSize="14" Margin="5" /> </StackPanel> <!-- DataGrid for Connections --> <TabControl Margin="10" Grid.Row="2" > <TabItem Header="Connections" > <DataGrid Name="NetworkDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick"> <DataGrid.Columns> <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/> <DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/> <DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/> <DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/> <DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/> <DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/> <DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/> <DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/> <DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/> </DataGrid.Columns> </DataGrid> </TabItem> <TabItem Header="Inbound Connections" > <DataGrid Name="InboundDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick"> <DataGrid.Columns> <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/> <DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/> <DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/> <DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/> <DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/> <DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/> <DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/> <DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/> <DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/> </DataGrid.Columns> </DataGrid> </TabItem> <TabItem Header="Outbound Connections" > <DataGrid Name="OutboundDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick"> <DataGrid.Columns> <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/> <DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/> <DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/> <DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/> <DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/> <DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/> <DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/> <DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/> <DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/> </DataGrid.Columns> </DataGrid> </TabItem> </TabControl> <!-- Export Section --> <StackPanel Grid.Row="3" Orientation="Horizontal" Margin="10"> <Button Content="Export to JSON" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToJsonButton_Click" /> <Button Content="Export to XML" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToXmlButton_Click" /> <Button Content="Export to CSV" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToCsvButton_Click" /> <Button Content="Export to HTML" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToHtmlButton_Click" /> <Button Content="Save Filter Preset" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="SaveFilterPresetButton_Click" /> <Button Content="Load Filter Preset" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="LoadFilterPresetButton_Click" /> <Button Content="Kill Process" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="KillProcessButton_Click" /> <Button Content="IP Lookup" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="IpLookupButton_Click" /> <Button Content="Block IP" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="BlockIpButton_Click" /> <StackPanel> <CheckBox x:Name="chkMinimize" Content="Minimize on start" VerticalContentAlignment="Center" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Checked="chkMinimize_Checked" /> <CheckBox x:Name="chkShowPopups" Content="Show notifications" VerticalContentAlignment="Center" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" IsChecked="True" Checked="chkShowPopups_Checked" /> </StackPanel> </StackPanel> </Grid> </Window>