in Accessibility/FindText/FindTextClient/SearchWindow.cs [164:522]
public SearchWindow()
{
// Specify the target applications.
_wpfTarget =
Application.StartupPath + "\\FindText.exe";
_w32Target = "WordPad.exe";
// Initialize search direction.
// Search direction buttons are enabled or disabled based on this value.
_searchBackward = false;
// Layout the client controls.
try
{
// Specs for Window.
double clientHeight = 600;
double clientWidth = 550;
// Specs for TextBox.
var maxSearchLines = 1;
var maxSearchLength = 25;
// Specs for Buttons.
double buttonWidth = 140;
// Instantiate the client window and set location and size.
_clientWindow = new Window
{
Height = clientHeight,
Width = clientWidth,
Left = SystemParameters.WorkArea.Location.X + 50,
Top = SystemParameters.WorkArea.Location.Y + 50,
Title = "Find Text",
WindowStyle = WindowStyle.ToolWindow
};
// Create a dock panel to hold all controls.
_clientDockPanel = new DockPanel
{
Margin = new Thickness(10),
LastChildFill = true
};
// Add the start target buttons.
_startWpfTargetButton = new Button
{
Width = buttonWidth,
Content = "Start _FlowDocument (WPF)",
Tag = TargetApplication.FlowDocument
};
_startWpfTargetButton.Click +=
StartTargetApplication_Click;
_startW32TargetButton = new Button
{
Width = buttonWidth,
Content = "Start _WordPad (Win32)",
Tag = TargetApplication.WordPad
};
_startW32TargetButton.Click +=
StartTargetApplication_Click;
DockPanel.SetDock(_startWpfTargetButton, Dock.Top);
DockPanel.SetDock(_startW32TargetButton, Dock.Top);
_clientDockPanel.Children.Add(_startWpfTargetButton);
_clientDockPanel.Children.Add(_startW32TargetButton);
// Add the find text control button.
_findEditButton = new Button
{
Width = buttonWidth,
Content = "_Find text provider"
};
_findEditButton.Click +=
FindTextProvider_Click;
_findEditButton.Visibility = Visibility.Collapsed;
DockPanel.SetDock(_findEditButton, Dock.Top);
_clientDockPanel.Children.Add(_findEditButton);
// Add the target status label.
_targetResult = new Label
{
Content = "",
BorderThickness = new Thickness(1),
BorderBrush = Brushes.Black,
HorizontalAlignment = HorizontalAlignment.Center,
Margin = new Thickness(0, 0, 0, 10),
Visibility = Visibility.Hidden
};
DockPanel.SetDock(_targetResult, Dock.Top);
_clientDockPanel.Children.Add(_targetResult);
// Add the client control layout grid.
_infoGrid = new Grid
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Top,
ShowGridLines = false,
Visibility = Visibility.Collapsed,
MinWidth = 400
};
// Define the columns.
var colDef1 = new ColumnDefinition();
var colDef2 = new ColumnDefinition();
_infoGrid.ColumnDefinitions.Add(colDef1);
_infoGrid.ColumnDefinitions.Add(colDef2);
// Define the rows.
var rowDef1 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef2 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef3 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef4 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef5 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef6 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef7 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef8 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef9 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef10 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
var rowDef11 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
_infoGrid.RowDefinitions.Add(rowDef1);
_infoGrid.RowDefinitions.Add(rowDef2);
_infoGrid.RowDefinitions.Add(rowDef3);
_infoGrid.RowDefinitions.Add(rowDef4);
_infoGrid.RowDefinitions.Add(rowDef5);
_infoGrid.RowDefinitions.Add(rowDef6);
_infoGrid.RowDefinitions.Add(rowDef7);
_infoGrid.RowDefinitions.Add(rowDef8);
_infoGrid.RowDefinitions.Add(rowDef9);
_infoGrid.RowDefinitions.Add(rowDef10);
_infoGrid.RowDefinitions.Add(rowDef11);
// Define the content of the cells.
// Row 1 - Search string details.
_searchString = new TextBox
{
Name = "SearchString",
MaxLines = maxSearchLines,
MaxLength = maxSearchLength,
Width = 200
};
//searchString.Height = 25;
_searchString.TextChanged +=
SearchString_Change;
_searchString.IsEnabled = false;
Grid.SetRow(_searchString, 0);
Grid.SetColumn(_searchString, 1);
var searchLabel = new Label
{
Target = _searchString,
Content = "_Search for: ",
VerticalAlignment = VerticalAlignment.Center
};
Grid.SetRow(searchLabel, 0);
Grid.SetColumn(searchLabel, 0);
_infoGrid.Children.Add(searchLabel);
_infoGrid.Children.Add(_searchString);
// Row 2 - Search direction buttons.
_searchBackwardButton = new Button
{
Width = buttonWidth,
Content = "Search _Backward",
Tag = TraversalDirection.Backward
};
//searchBackwardButton.Height = buttonHeight;
_searchBackwardButton.Click +=
SearchDirection_Click;
_searchBackwardButton.Margin = new Thickness(0, 0, 0, 10);
_searchBackwardButton.IsEnabled = false;
Grid.SetRow(_searchBackwardButton, 1);
Grid.SetColumn(_searchBackwardButton, 0);
_searchForwardButton = new Button
{
Width = buttonWidth,
Content = "Search _Forward",
Tag = TraversalDirection.Forward
};
//searchForwardButton.Height = buttonHeight;
_searchForwardButton.Click +=
SearchDirection_Click;
_searchForwardButton.Margin = new Thickness(0, 0, 0, 10);
_searchForwardButton.IsEnabled = false;
Grid.SetRow(_searchForwardButton, 1);
Grid.SetColumn(_searchForwardButton, 1);
_infoGrid.Children.Add(_searchBackwardButton);
_infoGrid.Children.Add(_searchForwardButton);
// Row 3 - Target selection.
_targetSelectionLabel = new Label
{
Target = _targetSelection,
Content = "Currently selected:"
};
Grid.SetRow(_targetSelectionLabel, 2);
Grid.SetColumn(_targetSelectionLabel, 0);
Grid.SetColumnSpan(_targetSelectionLabel, 2);
_infoGrid.Children.Add(_targetSelectionLabel);
// Row 4.
_targetSelection = new TextBox
{
TextWrapping = TextWrapping.Wrap,
MaxWidth = 400,
Height = 100,
VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
IsReadOnly = true,
Margin = new Thickness(0, 0, 0, 0)
};
Grid.SetRow(_targetSelection, 3);
Grid.SetColumn(_targetSelection, 0);
Grid.SetColumnSpan(_targetSelection, 2);
_infoGrid.Children.Add(_targetSelection);
// Row 5 - Target selection attributes.
_targetSelectionAttributeLabel = new Label
{
Target = _targetSelection,
Content = "Attribute values: "
};
Grid.SetRow(_targetSelectionAttributeLabel, 4);
Grid.SetColumn(_targetSelectionAttributeLabel, 0);
Grid.SetColumnSpan(_targetSelectionAttributeLabel, 2);
_infoGrid.Children.Add(_targetSelectionAttributeLabel);
// Row 6.
_targetSelectionAttributes = new TextBox
{
TextWrapping = TextWrapping.Wrap,
MaxWidth = 400,
Height = 100,
VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
IsReadOnly = true,
Margin = new Thickness(0, 0, 0, 10)
};
Grid.SetRow(_targetSelectionAttributes, 5);
Grid.SetColumn(_targetSelectionAttributes, 0);
Grid.SetColumnSpan(_targetSelectionAttributes, 2);
_infoGrid.Children.Add(_targetSelectionAttributes);
// Row 7 - Navigate target details.
_navigateTarget = new ComboBox {Width = buttonWidth};
_navigateTarget.Items.Add(TextUnit.Character);
_navigateTarget.Items.Add(TextUnit.Format);
_navigateTarget.Items.Add(TextUnit.Word);
_navigateTarget.Items.Add(TextUnit.Line);
_navigateTarget.Items.Add(TextUnit.Paragraph);
_navigateTarget.Items.Add(TextUnit.Page);
_navigateTarget.SelectedIndex = 0;
_navigateTarget.SelectionChanged +=
NavigationUnit_Change;
Grid.SetRow(_navigateTarget, 6);
Grid.SetColumn(_navigateTarget, 1);
var navigateLabel = new Label
{
Target = _navigateTarget,
Content = "_Navigate target by text unit of: ",
VerticalAlignment = VerticalAlignment.Center
};
Grid.SetRow(navigateLabel, 6);
Grid.SetColumn(navigateLabel, 0);
_infoGrid.Children.Add(navigateLabel);
_infoGrid.Children.Add(_navigateTarget);
// Row 8 - Navigate target direction buttons.
var navigateBackwardButton = new Button
{
Width = buttonWidth,
Content = "_Backward",
Tag = TraversalDirection.Backward
};
navigateBackwardButton.Click += Navigate_Click;
navigateBackwardButton.Margin = new Thickness(0, 0, 0, 10);
Grid.SetRow(navigateBackwardButton, 7);
Grid.SetColumn(navigateBackwardButton, 0);
var navigateForwardButton = new Button
{
Width = buttonWidth,
Content = "_Forward",
Tag = TraversalDirection.Forward
};
navigateForwardButton.Click += Navigate_Click;
navigateForwardButton.Margin = new Thickness(0, 0, 0, 10);
Grid.SetRow(navigateForwardButton, 7);
Grid.SetColumn(navigateForwardButton, 1);
_infoGrid.Children.Add(navigateBackwardButton);
_infoGrid.Children.Add(navigateForwardButton);
// Row 9 - Expand the target selection controls.
_expandHighlight = new ComboBox {Width = buttonWidth};
_expandHighlight.Items.Add("");
_expandHighlight.Items.Add("None");
_expandHighlight.Items.Add(TextUnit.Character);
_expandHighlight.Items.Add(TextUnit.Format);
_expandHighlight.Items.Add(TextUnit.Word);
_expandHighlight.Items.Add(TextUnit.Line);
_expandHighlight.Items.Add(TextUnit.Paragraph);
_expandHighlight.Items.Add(TextUnit.Page);
_expandHighlight.Items.Add(TextUnit.Document);
_expandHighlight.SelectedIndex = 0;
_expandHighlight.SelectionChanged +=
ExpandToTextUnit_Change;
_expandHighlight.Margin = new Thickness(0, 0, 0, 10);
Grid.SetRow(_expandHighlight, 8);
Grid.SetColumn(_expandHighlight, 1);
var expandLabel = new Label
{
Target = _expandHighlight,
Content = "_Expand selection to text unit of: ",
VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(0, 0, 0, 10)
};
Grid.SetRow(expandLabel, 8);
Grid.SetColumn(expandLabel, 0);
_infoGrid.Children.Add(expandLabel);
_infoGrid.Children.Add(_expandHighlight);
// Row 10 - target selection details such as child elements
// and enclosing unit.
_targetSelectionDetails = new TextBox
{
Height = 100,
VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
IsReadOnly = true
};
Grid.SetRow(_targetSelectionDetails, 9);
Grid.SetColumn(_targetSelectionDetails, 0);
Grid.SetColumnSpan(_targetSelectionDetails, 2);
_infoGrid.Children.Add(_targetSelectionDetails);
// Row 11 - get the child elements and the enclosing unit
// of the target selection.
var getChildren = new Button
{
Width = buttonWidth,
Content = "Get children of selection"
};
getChildren.Click += GetChildren_Click;
Grid.SetRow(getChildren, 10);
Grid.SetColumn(getChildren, 0);
var getEnclosingElement = new Button
{
Width = buttonWidth,
Content = "Get enclosing element"
};
getEnclosingElement.Click += GetEnclosingElement_Click;
Grid.SetRow(getEnclosingElement, 10);
Grid.SetColumn(getEnclosingElement, 1);
_infoGrid.Children.Add(getChildren);
_infoGrid.Children.Add(getEnclosingElement);
// Add the grid to the dock panel.
DockPanel.SetDock(_infoGrid, Dock.Top);
_clientDockPanel.Children.Add(_infoGrid);
// Add the dock panel to the window.
_clientWindow.Content = _clientDockPanel;
_clientWindow.Show();
}
// Do we successfully create the client app?
catch (InvalidOperationException)
{
// TODO: error handling.
}
}