ExpressionEditorWindow.xaml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <Window x:Class="InABox.DynamicGrid.ExpressionEditorWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:InABox.DynamicGrid"
  7. xmlns:system="clr-namespace:System;assembly=System.Runtime"
  8. mc:Ignorable="d"
  9. Title="Expression Editor" Height="650" Width="800"
  10. Loaded="ExpressionWindow_Loaded"
  11. x:Name="ExpressionWindow">
  12. <Window.Resources>
  13. <local:ExpressionEditorVariableTemplateSelector x:Key="variableTemplateSelector"/>
  14. <local:ExpressionEditorVariableTemplateItemStyleSelector x:Key="variableTemplateItemStyleSelector"/>
  15. <Style x:Key="variableTemplateItemStyle" TargetType="{x:Type ListBoxItem}">
  16. <Setter Property="Template">
  17. <Setter.Value>
  18. <ControlTemplate TargetType="{x:Type ListBoxItem}">
  19. <ContentPresenter/>
  20. </ControlTemplate>
  21. </Setter.Value>
  22. </Setter>
  23. </Style>
  24. <Style x:Key="tooltipDescriptionStyle" TargetType="TextBlock">
  25. <Style.Triggers>
  26. <DataTrigger Binding="{Binding Path=Description}" Value="">
  27. <Setter Property="Visibility" Value="Collapsed" />
  28. </DataTrigger>
  29. </Style.Triggers>
  30. </Style>
  31. <Style x:Key="VariableListStyle" TargetType="ListBox">
  32. <Setter Property="ItemTemplate" Value="{StaticResource VariableExpanderTemplate}"/>
  33. <Style.Triggers>
  34. <DataTrigger Binding="{Binding HasChildren}" Value="True"/>
  35. </Style.Triggers>
  36. </Style>
  37. <DataTemplate x:Key="VariableTemplate" DataType="local:ExpressionEditorVariable">
  38. <ContentControl MouseDoubleClick="Variable_Click"
  39. Tag="{Binding VariableName}">
  40. <TextBlock Text="{Binding Display}"
  41. FontFamily="Consolas" FontSize="12"
  42. Padding="5"/>
  43. </ContentControl>
  44. </DataTemplate>
  45. <DataTemplate x:Key="VariableExpanderTemplate" DataType="{x:Type local:ExpressionEditorVariable}">
  46. <Border BorderThickness="1,0,0,1" BorderBrush="LightGray"
  47. Padding="5">
  48. <Expander Header="{Binding Display}">
  49. <ListBox ItemsSource="{Binding ChildVariables}"
  50. ItemTemplateSelector="{StaticResource variableTemplateSelector}"
  51. ItemContainerStyleSelector="{StaticResource variableTemplateItemStyleSelector}"
  52. HorizontalContentAlignment="Stretch"
  53. BorderThickness="0">
  54. <ListBox.Template>
  55. <ControlTemplate>
  56. <ItemsPresenter/>
  57. </ControlTemplate>
  58. </ListBox.Template>
  59. </ListBox>
  60. </Expander>
  61. </Border>
  62. </DataTemplate>
  63. </Window.Resources>
  64. <Grid Margin="5">
  65. <Grid.ColumnDefinitions>
  66. <ColumnDefinition Width="*"/>
  67. <ColumnDefinition Width="250"/>
  68. </Grid.ColumnDefinitions>
  69. <Grid.RowDefinitions>
  70. <RowDefinition Height="*"/>
  71. <RowDefinition Height="Auto"/>
  72. </Grid.RowDefinitions>
  73. <TextBox x:Name="Editor"
  74. Grid.Column="0" Grid.Row="0" Grid.RowSpan="2"
  75. Background="LightYellow"
  76. BorderThickness="1,1,0,1"
  77. Padding="5"
  78. FontFamily="Consolas" FontSize="12"
  79. TextWrapping="Wrap"
  80. PreviewLostKeyboardFocus="Editor_PreviewLostKeyboardFocus"
  81. PreviewTextInput="Editor_PreviewTextInput"
  82. KeyDown="Editor_KeyDown"/>
  83. <Border Grid.Column="1" Grid.Row="0"
  84. BorderBrush="DarkGray" BorderThickness="1,0,0,0">
  85. <ScrollViewer VerticalScrollBarVisibility="Auto">
  86. <StackPanel>
  87. <Border BorderThickness="0,0,0,1" BorderBrush="LightGray"
  88. Padding="5">
  89. <Expander Header="Functions">
  90. <ItemsControl ItemsSource="{x:Static local:ExpressionEditorWindow.FunctionTemplates}">
  91. <ItemsControl.ItemTemplate>
  92. <DataTemplate>
  93. <Border BorderThickness="1,0,0,1" BorderBrush="LightGray"
  94. Padding="5">
  95. <Expander Header="{Binding Item1}">
  96. <ListBox ItemsSource="{Binding Item2}"
  97. HorizontalContentAlignment="Stretch"
  98. BorderThickness="0">
  99. <ListBox.Template>
  100. <ControlTemplate>
  101. <ItemsPresenter/>
  102. </ControlTemplate>
  103. </ListBox.Template>
  104. <ListBox.ItemTemplate>
  105. <DataTemplate DataType="local:FunctionTemplate">
  106. <ContentControl MouseDoubleClick="FunctionTemplate_Click"
  107. Tag="{Binding}">
  108. <TextBlock Text="{Binding Template}"
  109. FontFamily="Consolas" FontSize="12"
  110. Padding="5">
  111. <TextBlock.ToolTip>
  112. <ToolTip Background="LightGray">
  113. <StackPanel>
  114. <TextBlock Text="{Binding Tooltip}"
  115. FontFamily="Consolas" FontSize="12"/>
  116. <TextBlock Text="{Binding Description}" FontSize="12"
  117. Style="{StaticResource tooltipDescriptionStyle}"/>
  118. </StackPanel>
  119. </ToolTip>
  120. </TextBlock.ToolTip>
  121. </TextBlock>
  122. </ContentControl>
  123. </DataTemplate>
  124. </ListBox.ItemTemplate>
  125. </ListBox>
  126. </Expander>
  127. </Border>
  128. </DataTemplate>
  129. </ItemsControl.ItemTemplate>
  130. </ItemsControl>
  131. </Expander>
  132. </Border>
  133. <Border BorderThickness="0,0,0,1" BorderBrush="LightGray"
  134. Margin="0,5,0,0"
  135. Padding="5">
  136. <Expander Header="Variables" IsExpanded="True">
  137. <ListBox ItemsSource="{Binding Path=Variables,ElementName=ExpressionWindow}"
  138. HorizontalContentAlignment="Stretch"
  139. BorderThickness="0"
  140. ItemTemplateSelector="{StaticResource variableTemplateSelector}"
  141. ItemContainerStyleSelector="{StaticResource variableTemplateItemStyleSelector}">
  142. <ListBox.Template>
  143. <ControlTemplate>
  144. <ItemsPresenter/>
  145. </ControlTemplate>
  146. </ListBox.Template>
  147. </ListBox>
  148. </Expander>
  149. </Border>
  150. </StackPanel>
  151. </ScrollViewer>
  152. </Border>
  153. <Border Grid.Column="1" Grid.Row="1"
  154. BorderBrush="DarkGray" BorderThickness="1,0,0,0">
  155. <DockPanel LastChildFill="False">
  156. <Button Content="OK"
  157. DockPanel.Dock="Right"
  158. Click="OK_Click"
  159. Padding="5" Width="50" Height="30"/>
  160. </DockPanel>
  161. </Border>
  162. </Grid>
  163. </Window>