xaml/RemoteProUI.xaml
<Window x:Class="WpfPowershell.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:mdControls="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf" Title="RemotePro" MinHeight="990" MinWidth="800" WindowStartupLocation="CenterScreen" SizeToContent="WidthAndHeight" Background="{DynamicResource MaterialDesignPaper}"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <materialDesign:BundledTheme x:Key="AppTheme" BaseTheme="Light" PrimaryColor="Grey" SecondaryColor="Lime" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign2.Defaults.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <materialDesign:DialogHost> <materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}"> <!-- Left Drawer Content --> <materialDesign:DrawerHost.LeftDrawerContent> <StackPanel Margin="16" VerticalAlignment="Stretch"> <!-- Optional: A button inside the drawer to close it --> <Button Content="Close Drawer" Margin="5" HorizontalAlignment="Right" Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}" /> <!-- StackPanel with Your Buttons --> <StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,20,0,0"> <Button Content="TicketBlock" Margin="5" Name="TicketBlock" Width="140" Style="{StaticResource MaterialDesignRaisedButton}" /> <Button Content="CamReport" Margin="5" Name="CamReport" Width="140" Style="{StaticResource MaterialDesignRaisedButton}" /> <Button Content="Show Cameras" Margin="5" Name="ShowCameras" Width="140" Style="{StaticResource MaterialDesignRaisedButton}" /> <Button Content="VideoOSItems" Margin="5" Name="ShowVideoOSItems" Width="140" Style="{StaticResource MaterialDesignRaisedButton}" /> <Button Content="Show Hardware" Margin="5" Name="Hardware" Width="140" Style="{StaticResource MaterialDesignRaisedButton}" /> <Button Content="Show ItemState" Margin="5" Name="ItemState" Width="140" Style="{StaticResource MaterialDesignRaisedButton}" /> </StackPanel> </StackPanel> </materialDesign:DrawerHost.LeftDrawerContent> <!-- Main Content --> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!-- Top Toolbar with Navigation Buttons --> <materialDesign:ColorZone Padding="16" materialDesign:ElevationAssist.Elevation="Dp4" Mode="PrimaryMid" Grid.Row="0"> <DockPanel> <StackPanel Orientation="Horizontal"> <!-- The single MenuToggleButton used for the drawer --> <ToggleButton x:Name="MenuToggleButton" AutomationProperties.Name="HamburgerToggleButton" IsChecked="False" Style="{StaticResource MaterialDesignHamburgerToggleButton}" /> <Button Margin="24,0,0,0" materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}" x:Name="GithubRepositoryCommand" Content="{materialDesign:PackIcon Kind=Github, Size=24}" Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" Style="{StaticResource MaterialDesignToolButton}" ToolTip="Github Repository" /> <Button Margin="16,0,0,0" materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}" x:Name="PowerShellGalleryCommand" Content="{materialDesign:PackIcon Kind=Powershell, Size=24}" Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" Style="{StaticResource MaterialDesignToolButton}" ToolTip="PowerShell Gallery" /> <Button Margin="16,0,0,0" materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}" x:Name="DocsSiteCommand" Content="{materialDesign:PackIcon Kind=Web, Size=24}" Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" Style="{StaticResource MaterialDesignToolButton}" ToolTip="Module Documentation" /> </StackPanel> <materialDesign:PopupBox DockPanel.Dock="Right" PlacementMode="BottomAndAlignRightEdges" StaysOpen="False"> <StackPanel > <Grid Margin="10" > <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Margin="0,0,10,0" Text="Flow toggle" /> <ToggleButton x:Name="FlowDirectionToggleButton" Grid.Row="2" Grid.Column="1" /> <TextBlock Grid.Row="2" Grid.Column="2" Margin="10,10,0,0" Text="RTL" HorizontalAlignment="Left"/> </Grid> <Separator /> <Button x:Name="ReportIssueCommand" Content="Report Issue" Style="{StaticResource MaterialDesignFlatButton}" HorizontalAlignment="Left" /> <Button x:Name="LicenseInformationCommand" Content="License" Style="{StaticResource MaterialDesignFlatButton}" HorizontalAlignment="Left"/> <Button x:Name="AboutCommand" Content="About" Style="{StaticResource MaterialDesignFlatButton}" HorizontalAlignment="Left"/> <Separator /> <Button x:Name="ExitApplicationCommand" Content="Exit Application" Style="{StaticResource MaterialDesignFlatButton}" HorizontalAlignment="Left"/> </StackPanel> </materialDesign:PopupBox> <TextBlock Margin="-152,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" AutomationProperties.Name="RemotePro" FontSize="22" Text="RemotePro" /> </DockPanel> </materialDesign:ColorZone> <!-- Main Content Area --> <TabControl Grid.Row="1" Background="{DynamicResource MaterialDesignPaper}"> <TabItem Header="Manage Connections" ToolTip="Import, view, and select VMS connections and profiles."> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" MinHeight="200"> <Grid Margin="20"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- Connection Controls --> <mdControls:Card Grid.Row="0" Padding="20" Margin="0,0,0,20"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="130*"/> <!-- Space for the New/Open File buttons --> <ColumnDefinition Width="260*"/> <!-- Space for the ComboBox --> <ColumnDefinition Width="130*"/> <!-- Space for the Connect and Terminate buttons --> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Height="80" Width="225"> <Button Name="New_Connection_File" Content="Create Connection File" ToolTip="Create Excel template for importing connection profiles." Height="30" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" /> <Button Name="OpenFile" Content="Import Connections" ToolTip="Select Excel spreadsheet for importing connection profiles." Height="30" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" /> </StackPanel> <!-- Dropdown for selecting connection --> <StackPanel Grid.Column="1" VerticalAlignment="Center" Height="74"> <Label Content="Select Connection" FontSize="16" FontWeight="Bold" Margin="0,0,0,5" HorizontalAlignment="Center"/> <ComboBox Name="Connections_Combo_Box" ToolTip="Available MilestonePSTools connection profliles." Height="30" Margin="5" MaxDropDownHeight="350"/> </StackPanel> <!-- Connect and Terminate Buttons stacked and aligned to the right --> <StackPanel Grid.Column="2" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Height="80" Margin="13,0,0,0" Width="181"> <Button Name="Connect" Content="Connect" ToolTip="Connect to VMS." Height="30" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" /> <Button Name="Terminate" Content="Terminate Connection" ToolTip="Disconnect from VMS." Height="30" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" /> </StackPanel> </Grid> </mdControls:Card> <!-- Passthrough Command Input and Execute --> <mdControls:Card Grid.Row="2" Padding="20" Margin="0,0,0,20" Height="120"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="3*"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Label Content="Send PowerShell Command to Shell" FontSize="16" FontWeight="Bold" Grid.ColumnSpan="2" Margin="0,0,0,10" HorizontalAlignment="Left"/> <!-- ComboBox with a drop-down for predefined commands --> <ComboBox Name="CommandInput" ToolTip="Select or type command here." Margin="5,40,6,0" VerticalAlignment="Top" Grid.Column="0" Height="30" IsEditable="True" HorizontalAlignment="Stretch"> <!-- Predefined commands --> <ComboBoxItem Content="Get-Runspace | Out-GridView" /> <ComboBoxItem Content="Get-Command -Module RemotePro | Out-HtmlView -EnableScroller -ScrollX -AlphabetSearch -SearchPane" /> <ComboBoxItem Content="Get-RpControllerObject | Get-Member | Out-HtmlView -EnableScroller -ScrollX -AlphabetSearch -SearchPane" /> <ComboBoxItem Content="Get-RpEventHandlers | Out-HtmlView -EnableScroller -ScrollX -AlphabetSearch -SearchPane" /> <ComboBoxItem Content="Get-RpRunspaceEvents | Out-HtmlView -EnableScroller -ScrollX -AlphabetSearch -SearchPane"/> <!-- User can also type their own command --> </ComboBox> <!-- Execute Button with Icon --> <Button Name="ExecuteCommand" ToolTip="Send command to main terminal." Style="{StaticResource MaterialDesignRaisedButton}" Margin="4,38,5,0" VerticalAlignment="Top" Grid.Column="1" Height="30"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="Terminal" Width="20" Height="20" Margin="0,0,5,0"/> <TextBlock Text="Execute" VerticalAlignment="Center"/> </StackPanel> </Button> </Grid> </mdControls:Card> <!-- Site Information TAB --> <TabControl Name="SiteAndProfileTabControl" Grid.Row="3" Margin="0,20,0,0"> <TabItem Header="VMS Connection Overview" ToolTip="View details for current VMS connection."> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Height="500"> <mdControls:Card Padding="20" Margin="10"> <TextBox Name="Connection_Status_Box" ToolTip="Management and Recording Server(s) details" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" AcceptsReturn="True" IsReadOnly="True" MinHeight="450" Background="{DynamicResource MaterialDesignPaper}"/> </mdControls:Card> </ScrollViewer> </TabItem> <!-- MilestonePSTools Connection Profile Details Section --> <TabItem Header="MilestonePSTools Connection Profile Details" ToolTip="View MilestonePSTools connection profile information."> <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- Top bar with Refresh, View Details, Delete, and Add Profile buttons --> <StackPanel Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Center" Margin="5"> <!-- Refresh Button with Icon --> <Button x:Name="Connection_Profile_Refresh_Button" VerticalAlignment="Top" ToolTip="Refresh Profile List" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Refresh" Width="24" Height="24"/> </Button> <!-- View Details Button with Icon --> <Button x:Name="PopOutButton" VerticalAlignment="Top" ToolTip="View profile details in a separate window" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Eye" Width="24" Height="24"/> </Button> <!-- Delete Button with Icon --> <Button x:Name="Delete_Profile_Button" VerticalAlignment="Top" ToolTip="Delete selected profile" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Delete" Width="24" Height="24"/> </Button> <!-- Add Profile Button with Icon --> <Button x:Name="Add_Profile_Button" VerticalAlignment="Top" ToolTip="Add a new profile" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Plus" Width="24" Height="24"/> </Button> <!-- Edit Profile Button with Icon --> <Button x:Name="Edit_Profile_Button" VerticalAlignment="Top" ToolTip="Edit existing profile" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Pencil" Width="24" Height="24"/> </Button> </StackPanel> <!-- Card containing the ListBox --> <mdControls:Card Grid.Row="1" Padding="20"> <ListBox x:Name="ConnectionProfileListBox" SelectionMode="Extended" Background="{DynamicResource MaterialDesignPaper}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Auto" MaxHeight="350"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="5"> <!-- Name --> <TextBlock x:Name="NameTextBlock" Text="{Binding Name}" Margin="5,0" Width="150" VerticalAlignment="Center"/> <!-- Server Address --> <TextBlock x:Name="ServerAddressTextBlock" Text="{Binding ServerAddress}" Margin="5,0" Width="200" VerticalAlignment="Center"/> <!-- Credential --> <TextBlock x:Name="CredentialTextBlock" Text="{Binding Credential}" Margin="5,0" Width="200" VerticalAlignment="Center"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </mdControls:Card> </Grid> </TabItem> </TabControl> </Grid> </ScrollViewer> </TabItem> <!-- Runspace Log TAB --> <TabItem Header="Runspace Log" ToolTip="View logs from runspace dispatched cmdlets."> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Name="LogScrollViewer"> <TextBox Name="Runspace_Mutex_Log" TextWrapping="Wrap" IsReadOnly="True" VerticalAlignment="Top" HorizontalAlignment="Left" Width = "{Binding ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}}" MaxHeight="800" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" /> </ScrollViewer> </TabItem> <!-- Configuration TAB --> <TabItem Header="Configuration"> <TabControl Name="ConfigurationTabs" Grid.Row="0" Margin="0,20,0,0"> <!-- RemotePro Main Settings --> <TabItem Header="Main Settings" ToolTip="Interact with RemotePro Main Settings."> <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- Heading bar with Refresh, View Details, Delete, and Add Profile buttons --> <StackPanel Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Center" Margin="5"> <!-- Refresh Settings Button with Icon --> <Button x:Name="RefreshSettings" VerticalAlignment="Top" ToolTip="Refresh Settings from disk file" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Refresh" Width="24" Height="24"/> </Button> <!-- Delete Setting Button with Icon --> <Button x:Name="DeleteSetting" VerticalAlignment="Top" ToolTip="Delete selected Setting" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Delete" Width="24" Height="24"/> </Button> <!-- Add Setting Button with Icon --> <Button x:Name="AddSetting" VerticalAlignment="Top" ToolTip="Add a new Setting" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Plus" Width="24" Height="24"/> </Button> <!-- Edit Setting Button with Icon --> <Button x:Name="EditSetting" VerticalAlignment="Top" ToolTip="Edit existing Setting" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Pencil" Width="24" Height="24"/> </Button> <!-- Reset Settings Button with Icon --> <Button x:Name="ResetSettings" VerticalAlignment="Top" ToolTip="Reset settings to default values" Style="{StaticResource MaterialDesignFlatButton}" Margin="5"> <materialDesign:PackIcon Kind="Alert" Width="24" Height="24"/> </Button> </StackPanel> <mdControls:Card Grid.Row="1" Padding="20" Background="Transparent"> <ListView x:Name="Settings" ToolTip="Modify RemotePro settings and behavior." SelectionMode="Extended" Background="Transparent" HorizontalAlignment="Stretch" VerticalAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"> <ListView.View> <GridView> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="200"/> <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Value}" Width="300"/> </GridView> </ListView.View> </ListView> </mdControls:Card> </Grid> </TabItem> <!-- ConfigCommands TAB --> <TabItem Header="ConfigCommands" ToolTip="Interact with button mapped commands."> <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- Heading bar with Refresh, View Details, Delete, and Add Profile buttons --> <Grid Grid.Row="0" HorizontalAlignment="Center" Margin="5"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <!-- Refresh ConfigCommands Button with Icon --> <Button x:Name="RefreshConfigCommands" VerticalAlignment="Top" ToolTip="Refresh ConfigCommands from disk file" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" Grid.Column="0"> <materialDesign:PackIcon Kind="Refresh" Width="24" Height="24"/> </Button> <!-- Delete ConfigCommand Button with Icon --> <Button x:Name="DeleteConfigCommands" VerticalAlignment="Top" ToolTip="Delete selected ConfigCommand(s)" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" Grid.Column="1"> <materialDesign:PackIcon Kind="Delete" Width="24" Height="24"/> </Button> <!-- Add ConfigCommand Button with Icon --> <Button x:Name="AddConfigCommand" VerticalAlignment="Top" ToolTip="Add a new ConfigCommand" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" Grid.Column="2"> <materialDesign:PackIcon Kind="Plus" Width="24" Height="24"/> </Button> <!-- Edit ConfigCommand Button with Icon --> <Button x:Name="EditConfigCommand" VerticalAlignment="Top" ToolTip="Edit existing ConfigCommand" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" Grid.Column="3"> <materialDesign:PackIcon Kind="Pencil" Width="24" Height="24"/> </Button> <!-- View ConfigCommand Details Button with Icon --> <Button x:Name="ResetConfigCommands" VerticalAlignment="Top" ToolTip="Reset ConfigCommands to default values" Style="{StaticResource MaterialDesignFlatButton}" Margin="5" Grid.Column="4"> <materialDesign:PackIcon Kind="Alert" Width="24" Height="24"/> </Button> </Grid> <!-- DataGrid in Material Design Card with ScrollViewer --> <materialDesign:Card Name="Commands_Card" Grid.Row="1" Background="{DynamicResource PrimaryHueLightBrush}" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Width="1100" Padding="30" Margin="20,0,0,20"> <StackPanel> <StackPanel Orientation="Horizontal" Margin="60,0,0,10" HorizontalAlignment="Left"> <materialDesign:PackIcon Kind="FilterVariant" Height="25" Width="25" Margin="0,0,5,0"/> <TextBox Name="TxtBox_FilterByName" VerticalAlignment="Top" AcceptsReturn="False" TextWrapping="Wrap" materialDesign:HintAssist.Hint="Filter By Command Name" /> </StackPanel> <ScrollViewer Name="Commands_ScrollViewer" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" PanningMode="Both"> <DataGrid Name="Commands_DataGrid" ItemsSource="{Binding Commands}" SelectionMode="Extended" AutoGenerateColumns="False" SelectionUnit="CellOrRowHeader" CanUserAddRows="False" IsReadOnly="True" GridLinesVisibility="Horizontal" CanUserReorderColumns="True" materialDesign:DataGridAssist.CellPadding="20,10,0,10" materialDesign:DataGridAssist.ColumnHeaderPadding="20,5,0,5" MaxHeight="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=ActualHeight}"> <!-- Right-Click Context Menu --> <DataGrid.ContextMenu> <ContextMenu> <MenuItem Header="Copy" Command="ApplicationCommands.Copy"/> <MenuItem Header="Paste" Command="ApplicationCommands.Paste"/> </ContextMenu> </DataGrid.ContextMenu> <DataGrid.Columns> <!-- CheckBox Column --> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> <CheckBox Name="Commands_HeaderChkBox" IsThreeState="True"/> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding CheckboxSelect, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.Commands_DataGrid_CheckBox_Click}" CommandParameter="{Binding}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <!-- Module Name Column --> <DataGridTextColumn Binding="{Binding ModuleName}" IsReadOnly="True"> <DataGridTextColumn.Header> <TextBlock Text="Module Name" FontSize="18" /> </DataGridTextColumn.Header> </DataGridTextColumn> <!-- Command Name Column --> <DataGridTextColumn Binding="{Binding CommandName}" Width="180" IsReadOnly="True"> <DataGridTextColumn.Header> <TextBlock Text="Command Name" FontSize="18" /> </DataGridTextColumn.Header> </DataGridTextColumn> <!-- Description Column --> <DataGridTextColumn Binding="{Binding Description}" Width="250" IsReadOnly="True"> <DataGridTextColumn.Header> <TextBlock Text="Description" FontSize="18" /> </DataGridTextColumn.Header> </DataGridTextColumn> <!-- ID Column --> <DataGridTextColumn Binding="{Binding Id}" Width="410" IsReadOnly="True"> <DataGridTextColumn.Header> <TextBlock Text="ID" FontSize="18" /> </DataGridTextColumn.Header> </DataGridTextColumn> </DataGrid.Columns> </DataGrid> </ScrollViewer> </StackPanel> </materialDesign:Card> </Grid> </TabItem> <!-- RemotePro Paths --> <TabItem Name="RemoteProPaths" Header="RemotePro Paths" ToolTip="View paths used by the module."> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- Paths List Card --> <mdControls:Card Grid.Row="0" Padding="20" Margin="0,0,0,20"> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Height="Auto"> <ListBox x:Name="RemoteProPathsListBox" SelectionMode="Extended" Background="{DynamicResource MaterialDesignPaper}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Auto" Height="600"> <ListBox.ItemTemplate> <DataTemplate> <Border BorderThickness="0,0,0,1" BorderBrush="LightGray" Padding="10"> <StackPanel Orientation="Vertical" HorizontalAlignment="Center"> <!-- Centered Command --> <TextBlock Text="{Binding Command}" FontSize="16" FontWeight="Bold" Foreground="Black" HorizontalAlignment="Center" Margin="0,5,0,10" Width="600"/> <!-- Separate ListBox for Paths --> <ListBox Background="Transparent" BorderThickness="0" SelectionMode="Single" ScrollViewer.VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Center" Width="600"> <ListBoxItem> <TextBox Text="{Binding Path}" FontSize="14" Foreground="Black" Background="Transparent" BorderThickness="0" IsReadOnly="True" TextWrapping="Wrap" Padding="5" Width="600"/> </ListBoxItem> </ListBox> </StackPanel> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </ScrollViewer> </mdControls:Card> </Grid> </TabItem> </TabControl> </TabItem> <!-- ToDo: Heartbeat Tab <TabItem Header="Heartbeat"> <ScrollViewer VerticalScrollBarVisibility="Auto"> <TextBlock Text="Placeholder content for NHeartbeat" Margin="10" /> </ScrollViewer> </TabItem> --> </TabControl> </Grid> </materialDesign:DrawerHost> </materialDesign:DialogHost> </Window> |