| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | <Window x:Class="InABox.DynamicGrid.ExpressionEditorWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:local="clr-namespace:InABox.DynamicGrid"        xmlns:system="clr-namespace:System;assembly=System.Runtime"        mc:Ignorable="d"        Title="Expression Editor" Height="650" Width="800"        Loaded="ExpressionWindow_Loaded"        x:Name="ExpressionWindow">    <Window.Resources>        <local:ExpressionEditorVariableTemplateSelector x:Key="variableTemplateSelector"/>        <local:ExpressionEditorVariableTemplateItemStyleSelector x:Key="variableTemplateItemStyleSelector"/>        <Style x:Key="variableTemplateItemStyle" TargetType="{x:Type ListBoxItem}">            <Setter Property="Template">                <Setter.Value>                    <ControlTemplate TargetType="{x:Type ListBoxItem}">                        <ContentPresenter/>                    </ControlTemplate>                </Setter.Value>            </Setter>        </Style>        <Style x:Key="tooltipDescriptionStyle" TargetType="TextBlock">            <Style.Triggers>                <DataTrigger Binding="{Binding Path=Description}" Value="">                    <Setter Property="Visibility" Value="Collapsed" />                </DataTrigger>            </Style.Triggers>        </Style>        <Style x:Key="VariableListStyle" TargetType="ListBox">            <Setter Property="ItemTemplate" Value="{StaticResource VariableExpanderTemplate}"/>            <Style.Triggers>                <DataTrigger Binding="{Binding HasChildren}" Value="True"/>            </Style.Triggers>        </Style>        <DataTemplate x:Key="VariableTemplate" DataType="local:ExpressionEditorVariable">            <ContentControl MouseDoubleClick="Variable_Click"                            Tag="{Binding VariableName}">                <TextBlock Text="{Binding Display}"                           FontFamily="Consolas" FontSize="12"                           Padding="5"/>            </ContentControl>        </DataTemplate>        <DataTemplate x:Key="VariableExpanderTemplate" DataType="{x:Type local:ExpressionEditorVariable}">            <Border BorderThickness="1,0,0,1" BorderBrush="LightGray"                    Padding="5">                <Expander Header="{Binding Display}">                    <ListBox ItemsSource="{Binding ChildVariables}"                             ItemTemplateSelector="{StaticResource variableTemplateSelector}"                             ItemContainerStyleSelector="{StaticResource variableTemplateItemStyleSelector}"                             HorizontalContentAlignment="Stretch"                             BorderThickness="0">                        <ListBox.Template>                            <ControlTemplate>                                <ItemsPresenter/>                            </ControlTemplate>                        </ListBox.Template>                    </ListBox>                </Expander>            </Border>        </DataTemplate>    </Window.Resources>    <Grid Margin="5">        <Grid.ColumnDefinitions>            <ColumnDefinition Width="*"/>            <ColumnDefinition Width="250"/>        </Grid.ColumnDefinitions>        <Grid.RowDefinitions>            <RowDefinition Height="*"/>            <RowDefinition Height="Auto"/>        </Grid.RowDefinitions>        <TextBox x:Name="Editor"                 Grid.Column="0" Grid.Row="0" Grid.RowSpan="2"                 Background="LightYellow"                 BorderThickness="1,1,0,1"                 Padding="5"                 FontFamily="Consolas" FontSize="12"                 TextWrapping="Wrap"                 PreviewLostKeyboardFocus="Editor_PreviewLostKeyboardFocus"                 PreviewTextInput="Editor_PreviewTextInput"                 KeyDown="Editor_KeyDown"/>        <Border Grid.Column="1" Grid.Row="0"                BorderBrush="DarkGray" BorderThickness="1,0,0,0">            <ScrollViewer VerticalScrollBarVisibility="Auto">                <StackPanel>                    <Border BorderThickness="0,0,0,1" BorderBrush="LightGray"                            Padding="5">                        <Expander Header="Functions">                            <ItemsControl ItemsSource="{x:Static local:ExpressionEditorWindow.FunctionTemplates}">                                <ItemsControl.ItemTemplate>                                    <DataTemplate>                                        <Border BorderThickness="1,0,0,1" BorderBrush="LightGray"                                                Padding="5">                                            <Expander Header="{Binding Item1}">                                                <ListBox ItemsSource="{Binding Item2}"                                                         HorizontalContentAlignment="Stretch"                                                         BorderThickness="0">                                                    <ListBox.Template>                                                        <ControlTemplate>                                                            <ItemsPresenter/>                                                        </ControlTemplate>                                                    </ListBox.Template>                                                    <ListBox.ItemTemplate>                                                        <DataTemplate DataType="local:FunctionTemplate">                                                            <ContentControl MouseDoubleClick="FunctionTemplate_Click"                                                                            Tag="{Binding}">                                                                <TextBlock Text="{Binding Template}"                                                                           FontFamily="Consolas" FontSize="12"                                                                           Padding="5">                                                                    <TextBlock.ToolTip>                                                                        <ToolTip Background="LightGray">                                                                            <StackPanel>                                                                                <TextBlock Text="{Binding Tooltip}"                                                                                           FontFamily="Consolas" FontSize="12"/>                                                                                <TextBlock Text="{Binding Description}" FontSize="12"                                                                                           Style="{StaticResource tooltipDescriptionStyle}"/>                                                                            </StackPanel>                                                                        </ToolTip>                                                                    </TextBlock.ToolTip>                                                                </TextBlock>                                                            </ContentControl>                                                        </DataTemplate>                                                    </ListBox.ItemTemplate>                                                </ListBox>                                            </Expander>                                        </Border>                                    </DataTemplate>                                </ItemsControl.ItemTemplate>                            </ItemsControl>                        </Expander>                    </Border>                    <Border BorderThickness="0,0,0,1" BorderBrush="LightGray"                            Margin="0,5,0,0"                            Padding="5">                        <Expander Header="Variables" IsExpanded="True">                            <ListBox ItemsSource="{Binding Path=Variables,ElementName=ExpressionWindow}"                                     HorizontalContentAlignment="Stretch"                                     BorderThickness="0"                                     ItemTemplateSelector="{StaticResource variableTemplateSelector}"                                     ItemContainerStyleSelector="{StaticResource variableTemplateItemStyleSelector}">                                <ListBox.Template>                                    <ControlTemplate>                                        <ItemsPresenter/>                                    </ControlTemplate>                                </ListBox.Template>                            </ListBox>                        </Expander>                    </Border>                </StackPanel>            </ScrollViewer>        </Border>        <Border Grid.Column="1" Grid.Row="1"                BorderBrush="DarkGray" BorderThickness="1,0,0,0">            <DockPanel LastChildFill="False">                <Button Content="OK"                        DockPanel.Dock="Right"                        Click="OK_Click"                        Padding="5" Width="50" Height="30"/>            </DockPanel>        </Border>    </Grid></Window>
 |