@@ -132,56 +132,67 @@ public void LoadDataContext() {
132132 private void HelpContextMenu_Loaded ( object sender , RoutedEventArgs e ) {
133133 var menu = ( MenuItem ) sender ;
134134 var node = ( ExpressionNodeData ) menu . DataContext ;
135- MenuItem mi ;
136135
137136 if ( menu . Items . Any ( ) ) { return ; }
138137
138+ var listData = new List < ( string header , string url ) > ( ) ;
139+
139140 if ( node . ParentProperty . HasValue ) {
140141 var ( @namespace , typename , propertyname ) = node . ParentProperty . Value ;
141- mi = new MenuItem ( ) {
142- Header = $ "Property: { typename } .{ propertyname } "
143- } ;
144- mi . Click += ( s1 , e1 ) => {
145- var url = $ "{ BaseUrl } { new [ ] { @namespace , typename , propertyname } . Joined ( "." ) } ";
146- Process . Start ( url ) ;
147- } ;
148- menu . Items . Add ( mi ) ;
142+ listData . Add (
143+ $ "Property: { typename } .{ propertyname } ",
144+ $ "{ BaseUrl } { new [ ] { @namespace , typename , propertyname } . Joined ( "." ) } "
145+ ) ;
149146 }
150147
151148 if ( node . ParentProperty . HasValue && node . NodeTypeParts . HasValue ) {
152- menu . Items . Add ( new Separator ( ) ) ;
149+ listData . Add ( "---" , "" ) ;
153150 }
154151
155152 if ( node . NodeTypeParts . HasValue ) {
156153 var ( @namespace , typename , membername ) = node . NodeTypeParts . Value ;
157- mi = new MenuItem ( ) {
158- Header = $ "Node type: { typename } .{ membername } "
159- } ;
160- mi . Click += ( s1 , e1 ) => {
161- var url = $ "{ BaseUrl } { new [ ] { @namespace , typename } . Joined ( "." ) } #{ new [ ] { @namespace . Replace ( "." , "_" ) , typename , membername } . Joined ( "_" ) } ";
162- Process . Start ( url ) ;
163- } ;
164- menu . Items . Add ( mi ) ;
154+ listData . Add (
155+ $ "Node type: { typename } .{ membername } ",
156+ $ "{ BaseUrl } { new [ ] { @namespace , typename } . Joined ( "." ) } #{ new [ ] { @namespace . Replace ( "." , "_" ) , typename , membername } . Joined ( "_" ) } "
157+ ) ;
165158 }
166159
167160 if ( ( node . ParentProperty . HasValue || node . NodeTypeParts . HasValue ) && node . BaseTypes . Any ( ) ) {
168- menu . Items . Add ( new Separator ( ) ) ;
161+ listData . Add ( "---" , "" ) ;
169162 }
170163
171164 if ( node . BaseTypes != null ) {
172- node . BaseTypes . ForEachT ( ( @namespace , typename ) => {
173- mi = new MenuItem ( ) {
174- Header = $ "Base type: { typename } "
175- } ;
176- mi . Click += ( s1 , e1 ) => {
177- var url = $ "{ BaseUrl } { @namespace } .{ typename . Replace ( "~" , "-" ) } ";
178- Process . Start ( url ) ;
179- } ;
180- menu . Items . Add ( mi ) ;
181- } ) ;
165+ node . BaseTypes . SelectT ( ( @namespace , typename ) => (
166+ $ "Base type: { typename } ",
167+ $ "{ BaseUrl } { @namespace } .{ typename . Replace ( "~" , "-" ) } "
168+ ) ) . AddRangeTo ( listData ) ;
182169 }
170+
171+ listData . ForEachT ( ( header , url ) => {
172+ if ( header == "---" ) {
173+ menu . Items . Add ( new Separator ( ) ) ;
174+ return ;
175+ }
176+
177+ var mi = new MenuItem ( ) {
178+ Header = header
179+ } ;
180+ mi . Click += ( s1 , e1 ) => Process . Start ( url ) ;
181+ menu . Items . Add ( mi ) ;
182+ } ) ;
183183 }
184184
185185 private const string BaseUrl = "https://docs.microsoft.com/dotnet/api/" ;
186+
187+ private void CopyWatchExpression_Click ( object sender , RoutedEventArgs e ) {
188+ if ( txbRootExpression . Text . IsNullOrWhitespace ( ) ) {
189+ var dlg = new ExpressionRootPrompt ( ) ;
190+ dlg . ShowDialog ( ) ;
191+ txbRootExpression . Text = dlg . Expression ;
192+ }
193+
194+ var node = ( ExpressionNodeData ) ( ( MenuItem ) sender ) . DataContext ;
195+ Clipboard . SetText ( string . Format ( node . WatchExpressionFormatString , txbRootExpression . Text ) ) ;
196+ }
186197 }
187198}
0 commit comments