mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-02-17 07:56:24 +00:00
Add search bar to tweak page (#440)
This commit is contained in:
@@ -212,7 +212,16 @@
|
|||||||
<Style x:Key="LabelStyle" TargetType="TextBlock">
|
<Style x:Key="LabelStyle" TargetType="TextBlock">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource FgColor}"/>
|
<Setter Property="Foreground" Value="{DynamicResource FgColor}"/>
|
||||||
<Setter Property="FontSize" Value="12"/>
|
<Setter Property="FontSize" Value="12"/>
|
||||||
<Setter Property="Margin" Value="0,0,0,3"/>
|
<Setter Property="Margin" Value="0,0,0,2"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!-- Label Border Style for ComboBox labels -->
|
||||||
|
<Style x:Key="LabelBorderStyle" TargetType="Border">
|
||||||
|
<Setter Property="CornerRadius" Value="4"/>
|
||||||
|
<Setter Property="Padding" Value="6,2"/>
|
||||||
|
<Setter Property="Margin" Value="-4,-2,-4,0"/>
|
||||||
|
<Setter Property="Background" Value="Transparent"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<!-- Category card border style -->
|
<!-- Category card border style -->
|
||||||
@@ -221,7 +230,7 @@
|
|||||||
<Setter Property="BorderThickness" Value="1"/>
|
<Setter Property="BorderThickness" Value="1"/>
|
||||||
<Setter Property="CornerRadius" Value="4"/>
|
<Setter Property="CornerRadius" Value="4"/>
|
||||||
<Setter Property="Background" Value="{DynamicResource CardBgColor}"/>
|
<Setter Property="Background" Value="{DynamicResource CardBgColor}"/>
|
||||||
<Setter Property="Padding" Value="16,12"/>
|
<Setter Property="Padding" Value="16,12,16,2"/>
|
||||||
<Setter Property="Margin" Value="0,0,0,16"/>
|
<Setter Property="Margin" Value="0,0,0,16"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
@@ -268,7 +277,7 @@
|
|||||||
<Border x:Name="CheckBoxBorder" Grid.Column="0" Width="18" Height="18" Background="{DynamicResource CheckBoxBgColor}" BorderBrush="{DynamicResource CheckBoxBorderColor}" BorderThickness="1" CornerRadius="4" Margin="0,0,8,0">
|
<Border x:Name="CheckBoxBorder" Grid.Column="0" Width="18" Height="18" Background="{DynamicResource CheckBoxBgColor}" BorderBrush="{DynamicResource CheckBoxBorderColor}" BorderThickness="1" CornerRadius="4" Margin="0,0,8,0">
|
||||||
<TextBlock x:Name="CheckMark" Text="" FontFamily="Segoe MDL2 Assets" FontSize="12" Foreground="{DynamicResource ButtonBg}" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"/>
|
<TextBlock x:Name="CheckMark" Text="" FontFamily="Segoe MDL2 Assets" FontSize="12" Foreground="{DynamicResource ButtonBg}" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"/>
|
||||||
</Border>
|
</Border>
|
||||||
<ContentPresenter Grid.Column="1" VerticalAlignment="Center" Margin="0,0,0,1"/>
|
<ContentPresenter Grid.Column="1" VerticalAlignment="Center" Margin="0,0,0,2"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
<ControlTemplate.Triggers>
|
<ControlTemplate.Triggers>
|
||||||
@@ -297,8 +306,8 @@
|
|||||||
|
|
||||||
<!-- CheckBox style for feature toggles -->
|
<!-- CheckBox style for feature toggles -->
|
||||||
<Style x:Key="FeatureCheckboxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
|
<Style x:Key="FeatureCheckboxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
|
||||||
<Setter Property="Margin" Value="0,0,0,10"/>
|
<Setter Property="Margin" Value="-4,-2,-4,10"/>
|
||||||
<Setter Property="Padding" Value="0,2"/>
|
<Setter Property="Padding" Value="4,2"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<!-- CheckBox style for apps panels -->
|
<!-- CheckBox style for apps panels -->
|
||||||
@@ -608,17 +617,35 @@
|
|||||||
|
|
||||||
<!-- Filter Options -->
|
<!-- Filter Options -->
|
||||||
<Grid Margin="0,0,0,12">
|
<Grid Margin="0,0,0,12">
|
||||||
<StackPanel Orientation="Horizontal">
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
||||||
<Button x:Name="LoadDefaultsBtn" Content="Select Default Settings" ToolTip="Select the settings that are recommended for most people" Style="{StaticResource Win11ButtonSecondary}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Select Default Settings"/>
|
<Button x:Name="LoadDefaultsBtn" Content="Select Default Settings" ToolTip="Select the settings that are recommended for most people" Style="{StaticResource Win11ButtonSecondary}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Select Default Settings"/>
|
||||||
<Button x:Name="LoadLastUsedBtn" Content="Select Last Used Settings" ToolTip="Select the settings that were used the last time Win11Debloat was run" Style="{StaticResource Win11ButtonSecondary}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Select Last Used Settings"/>
|
<Button x:Name="LoadLastUsedBtn" Content="Select Last Used Settings" ToolTip="Select the settings that were used the last time Win11Debloat was run" Style="{StaticResource Win11ButtonSecondary}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Select Last Used Settings"/>
|
||||||
<Button x:Name="ClearAllTweaksBtn" Content="Clear Selection" ToolTip="Clear all selected tweaks" Style="{StaticResource Win11ButtonSecondary}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Clear Selection"/>
|
<Button x:Name="ClearAllTweaksBtn" Content="Clear Selection" ToolTip="Clear all selected tweaks" Style="{StaticResource Win11ButtonSecondary}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Clear Selection"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
<Border Grid.Column="2" BorderBrush="{DynamicResource ButtonBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource ComboBgColor}" Width="300" Padding="8,6">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock Grid.Column="0" Text="" FontFamily="Segoe MDL2 Assets" FontSize="14" VerticalAlignment="Center" Margin="4,0,8,0" Foreground="{DynamicResource FgColor}"/>
|
||||||
|
<TextBlock x:Name="TweakSearchPlaceholder" Grid.Column="1" Text="Search setting" Foreground="{DynamicResource FgColor}" Opacity="0.5" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/>
|
||||||
|
<TextBox x:Name="TweakSearchBox" Grid.Column="1" Background="Transparent" Foreground="{DynamicResource FgColor}" BorderThickness="0" FontSize="13" Margin="1,0,0,1" VerticalAlignment="Center" Text=""/>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<Grid>
|
<Grid>
|
||||||
<ScrollViewer VerticalScrollBarVisibility="Auto" Margin="0,-20,0,0" Padding="20,10,20,0">
|
<ScrollViewer x:Name="TweaksScrollViewer" VerticalScrollBarVisibility="Auto" Margin="0,-20,0,0" Padding="20,10,20,0">
|
||||||
<Grid Margin="0,10,0,5">
|
<Grid x:Name="TweaksGrid" Margin="0,10,0,5">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
|
|||||||
224
Win11Debloat.ps1
224
Win11Debloat.ps1
@@ -685,17 +685,25 @@ function OpenGUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Otherwise use a combobox for multiple options
|
# Otherwise use a combobox for multiple options
|
||||||
|
# Wrap label in a Border for search highlighting
|
||||||
|
$lblBorder = New-Object System.Windows.Controls.Border
|
||||||
|
$lblBorder.Style = $window.Resources['LabelBorderStyle']
|
||||||
|
$lblBorderName = "$comboName`_LabelBorder"
|
||||||
|
$lblBorder.Name = $lblBorderName
|
||||||
|
|
||||||
$lbl = New-Object System.Windows.Controls.TextBlock
|
$lbl = New-Object System.Windows.Controls.TextBlock
|
||||||
$lbl.Text = $labelText
|
$lbl.Text = $labelText
|
||||||
$lbl.Style = $window.Resources['LabelStyle']
|
$lbl.Style = $window.Resources['LabelStyle']
|
||||||
$labelName = "$comboName`_Label"
|
$labelName = "$comboName`_Label"
|
||||||
$lbl.Name = $labelName
|
$lbl.Name = $labelName
|
||||||
$parent.Children.Add($lbl) | Out-Null
|
|
||||||
|
|
||||||
# Register the label with the window's name scope
|
$lblBorder.Child = $lbl
|
||||||
|
$parent.Children.Add($lblBorder) | Out-Null
|
||||||
|
|
||||||
|
# Register the label border with the window's name scope
|
||||||
try {
|
try {
|
||||||
[System.Windows.NameScope]::SetNameScope($lbl, [System.Windows.NameScope]::GetNameScope($window))
|
[System.Windows.NameScope]::SetNameScope($lblBorder, [System.Windows.NameScope]::GetNameScope($window))
|
||||||
$window.RegisterName($labelName, $lbl)
|
$window.RegisterName($lblBorderName, $lblBorder)
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
# Name might already be registered, ignore
|
# Name might already be registered, ignore
|
||||||
@@ -985,21 +993,74 @@ function OpenGUI {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Shared search highlighting configuration
|
||||||
|
$script:SearchHighlightColor = [System.Windows.Media.SolidColorBrush]::new([System.Windows.Media.ColorConverter]::ConvertFromString("#FFF4CE"))
|
||||||
|
$script:SearchHighlightColorDark = [System.Windows.Media.SolidColorBrush]::new([System.Windows.Media.ColorConverter]::ConvertFromString("#4A4A2A"))
|
||||||
|
|
||||||
|
# Helper function to get the appropriate highlight brush based on theme
|
||||||
|
function GetSearchHighlightBrush {
|
||||||
|
if ($usesDarkMode) { return $script:SearchHighlightColorDark }
|
||||||
|
return $script:SearchHighlightColor
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to scroll to an item if it's not visible, centering it in the viewport
|
||||||
|
function ScrollToItemIfNotVisible {
|
||||||
|
param (
|
||||||
|
[System.Windows.Controls.ScrollViewer]$scrollViewer,
|
||||||
|
[System.Windows.UIElement]$item,
|
||||||
|
[System.Windows.UIElement]$container
|
||||||
|
)
|
||||||
|
|
||||||
|
if (-not $scrollViewer -or -not $item -or -not $container) { return }
|
||||||
|
|
||||||
|
try {
|
||||||
|
$itemPosition = $item.TransformToAncestor($container).Transform([System.Windows.Point]::new(0, 0)).Y
|
||||||
|
$viewportHeight = $scrollViewer.ViewportHeight
|
||||||
|
$itemHeight = $item.ActualHeight
|
||||||
|
$currentOffset = $scrollViewer.VerticalOffset
|
||||||
|
|
||||||
|
# Check if the item is currently visible in the viewport
|
||||||
|
$itemTop = $itemPosition - $currentOffset
|
||||||
|
$itemBottom = $itemTop + $itemHeight
|
||||||
|
|
||||||
|
$isVisible = ($itemTop -ge 0) -and ($itemBottom -le $viewportHeight)
|
||||||
|
|
||||||
|
# Only scroll if the item is not visible
|
||||||
|
if (-not $isVisible) {
|
||||||
|
# Center the item in the viewport
|
||||||
|
$targetOffset = $itemPosition - ($viewportHeight / 2) + ($itemHeight / 2)
|
||||||
|
$scrollViewer.ScrollToVerticalOffset([Math]::Max(0, $targetOffset))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
# Fallback to simple bring into view
|
||||||
|
$item.BringIntoView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to find the parent ScrollViewer of an element
|
||||||
|
function FindParentScrollViewer {
|
||||||
|
param ([System.Windows.UIElement]$element)
|
||||||
|
|
||||||
|
$parent = [System.Windows.Media.VisualTreeHelper]::GetParent($element)
|
||||||
|
while ($null -ne $parent) {
|
||||||
|
if ($parent -is [System.Windows.Controls.ScrollViewer]) {
|
||||||
|
return $parent
|
||||||
|
}
|
||||||
|
$parent = [System.Windows.Media.VisualTreeHelper]::GetParent($parent)
|
||||||
|
}
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
# App Search Box functionality
|
# App Search Box functionality
|
||||||
$appSearchBox = $window.FindName('AppSearchBox')
|
$appSearchBox = $window.FindName('AppSearchBox')
|
||||||
$appSearchPlaceholder = $window.FindName('AppSearchPlaceholder')
|
$appSearchPlaceholder = $window.FindName('AppSearchPlaceholder')
|
||||||
$highlightColor = [System.Windows.Media.SolidColorBrush]::new([System.Windows.Media.ColorConverter]::ConvertFromString("#FFF4CE"))
|
|
||||||
$highlightColorDark = [System.Windows.Media.SolidColorBrush]::new([System.Windows.Media.ColorConverter]::ConvertFromString("#4A4A2A"))
|
|
||||||
|
|
||||||
$appSearchBox.Add_TextChanged({
|
$appSearchBox.Add_TextChanged({
|
||||||
$searchText = $appSearchBox.Text.ToLower().Trim()
|
$searchText = $appSearchBox.Text.ToLower().Trim()
|
||||||
|
|
||||||
# Show/hide placeholder
|
# Show/hide placeholder
|
||||||
if ([string]::IsNullOrWhiteSpace($appSearchBox.Text)) {
|
$appSearchPlaceholder.Visibility = if ([string]::IsNullOrWhiteSpace($appSearchBox.Text)) { 'Visible' } else { 'Collapsed' }
|
||||||
$appSearchPlaceholder.Visibility = 'Visible'
|
|
||||||
} else {
|
|
||||||
$appSearchPlaceholder.Visibility = 'Collapsed'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Clear all highlights first
|
# Clear all highlights first
|
||||||
foreach ($child in $appsPanel.Children) {
|
foreach ($child in $appsPanel.Children) {
|
||||||
@@ -1008,61 +1069,124 @@ function OpenGUI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([string]::IsNullOrWhiteSpace($searchText)) {
|
if ([string]::IsNullOrWhiteSpace($searchText)) { return }
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find and highlight all matching apps
|
# Find and highlight all matching apps
|
||||||
$firstMatch = $null
|
$firstMatch = $null
|
||||||
$highlightBrush = if ($usesDarkMode) { $highlightColorDark } else { $highlightColor }
|
$highlightBrush = GetSearchHighlightBrush
|
||||||
|
|
||||||
foreach ($child in $appsPanel.Children) {
|
foreach ($child in $appsPanel.Children) {
|
||||||
if ($child -is [System.Windows.Controls.CheckBox]) {
|
if ($child -is [System.Windows.Controls.CheckBox] -and $child.Visibility -eq 'Visible') {
|
||||||
# Only consider visible apps (not filtered out by installed filter)
|
if ($child.Content.ToString().ToLower().Contains($searchText)) {
|
||||||
if ($child.Visibility -eq 'Visible') {
|
|
||||||
$appName = $child.Content.ToString().ToLower()
|
|
||||||
if ($appName.Contains($searchText)) {
|
|
||||||
# Highlight the matching app
|
|
||||||
$child.Background = $highlightBrush
|
$child.Background = $highlightBrush
|
||||||
|
if ($null -eq $firstMatch) { $firstMatch = $child }
|
||||||
# Remember first match for scrolling
|
|
||||||
if ($null -eq $firstMatch) {
|
|
||||||
$firstMatch = $child
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Scroll to first match - centered
|
# Scroll to first match if not visible
|
||||||
if ($firstMatch) {
|
if ($firstMatch) {
|
||||||
# Get the ScrollViewer that contains the apps panel
|
$scrollViewer = FindParentScrollViewer -element $appsPanel
|
||||||
$scrollViewer = $null
|
|
||||||
$parent = [System.Windows.Media.VisualTreeHelper]::GetParent($appsPanel)
|
|
||||||
while ($null -ne $parent) {
|
|
||||||
if ($parent -is [System.Windows.Controls.ScrollViewer]) {
|
|
||||||
$scrollViewer = $parent
|
|
||||||
break
|
|
||||||
}
|
|
||||||
$parent = [System.Windows.Media.VisualTreeHelper]::GetParent($parent)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($scrollViewer) {
|
if ($scrollViewer) {
|
||||||
# Calculate the position to scroll to for centering
|
ScrollToItemIfNotVisible -scrollViewer $scrollViewer -item $firstMatch -container $appsPanel
|
||||||
$itemPosition = $firstMatch.TransformToAncestor($appsPanel).Transform([System.Windows.Point]::new(0, 0)).Y
|
|
||||||
$viewportHeight = $scrollViewer.ViewportHeight
|
|
||||||
$itemHeight = $firstMatch.ActualHeight
|
|
||||||
|
|
||||||
# Center the item in the viewport
|
|
||||||
$targetOffset = $itemPosition - ($viewportHeight / 2) + ($itemHeight / 2)
|
|
||||||
$scrollViewer.ScrollToVerticalOffset([Math]::Max(0, $targetOffset))
|
|
||||||
} else {
|
|
||||||
# Fallback to simple bring into view
|
|
||||||
$firstMatch.BringIntoView()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Tweak Search Box functionality
|
||||||
|
$tweakSearchBox = $window.FindName('TweakSearchBox')
|
||||||
|
$tweakSearchPlaceholder = $window.FindName('TweakSearchPlaceholder')
|
||||||
|
$tweaksScrollViewer = $window.FindName('TweaksScrollViewer')
|
||||||
|
$tweaksGrid = $window.FindName('TweaksGrid')
|
||||||
|
$col0 = $window.FindName('Column0Panel')
|
||||||
|
$col1 = $window.FindName('Column1Panel')
|
||||||
|
$col2 = $window.FindName('Column2Panel')
|
||||||
|
|
||||||
|
# Helper function to clear all tweak highlights
|
||||||
|
function ClearTweakHighlights {
|
||||||
|
$columns = @($col0, $col1, $col2) | Where-Object { $_ -ne $null }
|
||||||
|
foreach ($column in $columns) {
|
||||||
|
foreach ($card in $column.Children) {
|
||||||
|
if ($card -is [System.Windows.Controls.Border] -and $card.Child -is [System.Windows.Controls.StackPanel]) {
|
||||||
|
foreach ($control in $card.Child.Children) {
|
||||||
|
if ($control -is [System.Windows.Controls.CheckBox] -or
|
||||||
|
($control -is [System.Windows.Controls.Border] -and $control.Name -like '*_LabelBorder')) {
|
||||||
|
$control.Background = [System.Windows.Media.Brushes]::Transparent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to check if a ComboBox contains matching items
|
||||||
|
function ComboBoxContainsMatch {
|
||||||
|
param ([System.Windows.Controls.ComboBox]$comboBox, [string]$searchText)
|
||||||
|
|
||||||
|
foreach ($item in $comboBox.Items) {
|
||||||
|
$itemText = if ($item -is [System.Windows.Controls.ComboBoxItem]) { $item.Content.ToString().ToLower() } else { $item.ToString().ToLower() }
|
||||||
|
if ($itemText.Contains($searchText)) { return $true }
|
||||||
|
}
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
$tweakSearchBox.Add_TextChanged({
|
||||||
|
$searchText = $tweakSearchBox.Text.ToLower().Trim()
|
||||||
|
|
||||||
|
# Show/hide placeholder
|
||||||
|
$tweakSearchPlaceholder.Visibility = if ([string]::IsNullOrWhiteSpace($tweakSearchBox.Text)) { 'Visible' } else { 'Collapsed' }
|
||||||
|
|
||||||
|
# Clear all highlights
|
||||||
|
ClearTweakHighlights
|
||||||
|
|
||||||
|
if ([string]::IsNullOrWhiteSpace($searchText)) { return }
|
||||||
|
|
||||||
|
# Find and highlight all matching tweaks
|
||||||
|
$firstMatch = $null
|
||||||
|
$highlightBrush = GetSearchHighlightBrush
|
||||||
|
$columns = @($col0, $col1, $col2) | Where-Object { $_ -ne $null }
|
||||||
|
|
||||||
|
foreach ($column in $columns) {
|
||||||
|
foreach ($card in $column.Children) {
|
||||||
|
if ($card -is [System.Windows.Controls.Border] -and $card.Child -is [System.Windows.Controls.StackPanel]) {
|
||||||
|
$controlsList = @($card.Child.Children)
|
||||||
|
for ($i = 0; $i -lt $controlsList.Count; $i++) {
|
||||||
|
$control = $controlsList[$i]
|
||||||
|
$matchFound = $false
|
||||||
|
$controlToHighlight = $null
|
||||||
|
|
||||||
|
if ($control -is [System.Windows.Controls.CheckBox]) {
|
||||||
|
if ($control.Content.ToString().ToLower().Contains($searchText)) {
|
||||||
|
$matchFound = $true
|
||||||
|
$controlToHighlight = $control
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif ($control -is [System.Windows.Controls.Border] -and $control.Name -like '*_LabelBorder') {
|
||||||
|
$labelText = if ($control.Child) { $control.Child.Text.ToLower() } else { "" }
|
||||||
|
$comboBox = if ($i + 1 -lt $controlsList.Count -and $controlsList[$i + 1] -is [System.Windows.Controls.ComboBox]) { $controlsList[$i + 1] } else { $null }
|
||||||
|
|
||||||
|
# Check label text or combo box items
|
||||||
|
if ($labelText.Contains($searchText) -or ($comboBox -and (ComboBoxContainsMatch -comboBox $comboBox -searchText $searchText))) {
|
||||||
|
$matchFound = $true
|
||||||
|
$controlToHighlight = $control
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($matchFound -and $controlToHighlight) {
|
||||||
|
$controlToHighlight.Background = $highlightBrush
|
||||||
|
if ($null -eq $firstMatch) { $firstMatch = $controlToHighlight }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Scroll to first match if not visible
|
||||||
|
if ($firstMatch -and $tweaksScrollViewer) {
|
||||||
|
ScrollToItemIfNotVisible -scrollViewer $tweaksScrollViewer -item $firstMatch -container $tweaksGrid
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
# Wizard Navigation
|
# Wizard Navigation
|
||||||
$tabControl = $window.FindName('MainTabControl')
|
$tabControl = $window.FindName('MainTabControl')
|
||||||
$previousBtn = $window.FindName('PreviousBtn')
|
$previousBtn = $window.FindName('PreviousBtn')
|
||||||
|
|||||||
Reference in New Issue
Block a user