There should be a SelectionChanged, or SelectedChanged. This would be on the tab control, not the tab item. That's how I act when the tab changes.
On Wed, Mar 2, 2016, 5:06 PM Mote, Todd <[email protected]> wrote: > OK. With the help of all your resources and another I found, > https://smsagent.wordpress.com/2015/09/07/powershell-tip-utilizing-runspaces-for-responsive-wpf-gui-applications, > I was able to get a working application that is in its own runspace and was > able to get a function running in its own runspace and writing to a common > gui textbox using .appendtext. it took some doing and I had to re do the > bit that uses .selectnode for the xml parsing to get all the variables > right and get them into a synced hashtable, but I got it working and so far > so good. > > > > Writing to the textbox from the runspaced function required wrapping the > whole write action with the .window.dispatcher.invoke({}) stuff and I had > to add the .scrolltoend() method to get the window to keep scrolling to the > bottom so the latest written there would stay visible. Kinda gross looking > and a lot to just write to a text box, but it works and produces the > desired effect. > > > > $syncHash.Window.Dispatcher.invoke([action]{ > > $syncHash.textBoxOutput.AppendText(( > '======================================================' +"`r`n")) > > $syncHash.textBoxOutput.AppendText(('Beginning operations.' +"`r`n" > )) > > $syncHash.textBoxOutput.ScrollToEnd() > > }) > > > > On to my stumbling block… > > > > My GUI has a couple of tabs in a tab control. In Forms I could use the > .add_click() method on the tabcontrol element and control elements of the > UI depending on what tab got clicked on. Like changing the text on the > submit button. (each tab does a different thing) but it seems that I can’t > use .add_click() on a WPF tabcontrol control. So how might I change the > text of a button based on what tab the user clicks on, in WPF? In forms it > was easy, I could do nothing but click on a tab and watch the text on the > button change from ‘Load’ to ‘Start’ and back again: > > > > $tabcontrol1.add_Click( { > > If($tabcontrol1.SelectedIndex -eq '0') > > { > > $buttonsubmit.Text = 'Load' > > } > > If($tabcontrol1.SelectedIndex -eq '1') > > { > > $buttonsubmit.Text = 'Start' > > $buttonsubmit.Enabled = $True > > } > > } ) > > > > The adjusted code for wpf which is basically the same, just with different > variables, fails with > > > > $syncHash.tabControl.add_click({ > > If($syncHash.tabControl.SelectedIndex -eq '0') > > { > > $syncHash.buttonSubmit.Content = 'Load' > > } > > If($syncHash.tabControl.SelectedIndex -eq '1') > > { > > $syncHash.buttonSubmit.IsEnabled = $True > > $syncHash.buttonSubmit.Content = 'Start' > > } > > }) > > > > Method invocation failed because [System.Windows.Controls.TabControl] does > not contain a method named 'Add_Click'. > > > > How can I make it run the check if I don’t have a click action on the tab > control? > > > > This is a small thing, and I have lots more code to adapt to runspaces, > but this will likely rear its head again, one of the tabs has elements on > it that hide, show, and bringtofront other elements depending on actions > and choices in others. > > > > Any ideas? I may just not know enough. > > > > Todd > > > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Mote, Todd > *Sent:* Friday, February 26, 2016 2:51 PM > *To:* '[email protected]' <[email protected]> > > > *Subject:* RE: [powershell] GUIs and runspaces > > > > Huh, .appendtext() is what I’m using now all over my original script, and > the ISE intellesenses it and auto completes it for me. This way it doesn’t > auto scroll all the way to the top of the box to replace all of the text, > once I fill up the text box unless I figure out threading I won’t be able > to scroll past the size of my box? > > > > > > > > > > *From:* [email protected] [ > mailto:[email protected] <[email protected]>] *On > Behalf Of *Ryan > *Sent:* Friday, February 26, 2016 12:32 PM > *To:* [email protected] > *Subject:* Re: [powershell] GUIs and runspaces > > > > You can pretty much lift all the original code. Microsoft tried to make > the WPF names match the WinForms names so this could be done. > > > > There is no appendtext method on text boxes. I would simply do > $TextBox.Text = $TextBox.Text + "New text" > > > > Bindings aren't really needed for text boxes and things like that. They > are required for DataGrids (though it could happen in the background > without you knowing) but I did a lot of work in WPF without doing any > bindings. Simply interact directly with the controls (like I did above for > the text box). Bindings greatly help the process along when you thread, but > it's not a big deal if you don't. > > On Fri, Feb 26, 2016 at 1:11 AM Mote, Todd <[email protected]> > wrote: > > Ok, Ok, So I installed VS Community, recreated my UI, and got it running > from ISE. What took about 1000 lines to build in Forms only took about 75 > lines in XAML. You convinced me. > > > > I had an issue with the select node code, but after messing around with it > I ended up taking “[@Name]” out since you’re getting the $_.name property > in the foreach. So mine works looking like this: > > > > $xaml.SelectNodes('//*') | Foreach-Object { Set-Variable -Name ('Window' + > '_' + $_.Name) -Value $Window.FindName($_.Name) } > > > > Which is fine, it makes all the variables like I expect them to. With the > [@Name] in there it didn’t return any results. > > > > Got my “Cancel” button closing the form too, and populated some of my pull > downs. Now the real work begins… > > > > I can pretty much lift all the functions and actions for all the buttons > and pulldown elements from my original code to this, changing the names of > the variables of course, right? Basically I can get it working the same > way it’s working now, just with WPF instead of forms? > > > > With all the stuff I do, I have a text box for output when users select > things in pull downs and click buttons, how do I append text to my output > text box if it’s in the XAML? Or is that the same too, I just do > $window_textboxOutput.appendtext((“stuff”))? It didn’t seem to work. > > > > I do want to runspace some things. I pretty sure I will have to do the > binding bit you talked about if I thread a button action that writes output > to the output text box, right? > > > > Fantastic series of post too, thanks much for writing them. I’m excitd to > try threading stuff, but I should probably get a handle on WPF I guess > first.. > > > > Thanks Ryan, and if at any point this is too much for the list I’m happy > to take it offlist if you have the time. > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Mote, Todd > *Sent:* Thursday, February 25, 2016 7:19 PM > *To:* [email protected] > *Subject:* RE: [powershell] GUIs and runspaces > > > > Windows forms, by hand. (I really need a copy of visual studio or > powershell studio, or something.. J ) > > > > Thanks so much guys. I had totally forgotten about this list until I saw > the error handling thread. I’d found http://poshcode.org/5520 and got > some of that to work, partly. I’ll start looking through these in earnest, > but it looks like exactly what I need. my ui is pretty complicated and > lots of elements do or don’t do things depending on data in other elements, > so I’m not sure how it will go, but I’ll give it a try. > > > > Xaml looks somewhat simpler to write, but I’ll save that for another day. > J > > > > > > > > > > *From:* [email protected] [ > mailto:[email protected] <[email protected]>] *On > Behalf Of *Ryan > *Sent:* Thursday, February 25, 2016 5:04 PM > *To:* [email protected] > *Subject:* Re: [powershell] GUIs and runspaces > > > > Is this WPF or Windows Forms? > > > > When I started writing WinForms, this blog post helped me learn about > different runspaces and how to make the forms more responsive: > https://www.sapien.com/blog/2012/05/16/powershell-studio-creating-responsive-forms/ > > > > If you are doing it in WPF, I have a series of posts on UI development: > http://www.ephingadmin.com/better-know-a-powershell-ui/ > > The "Quack like a duck" post talks about different threads and uses > PoshRSJob (3rd party cmdlet on GitHub) to do the threading. > > > > Boe Prox (the author of PoshRSJob) has a lot of good information on this > also. Here's a post about writing data from one thread to another: > > > http://learn-powershell.net/2012/10/14/powershell-and-wpf-writing-data-to-a-ui-from-a-different-runspace/ > > > > Let me know if you need any other resources! > > > > > > On Thu, Feb 25, 2016 at 4:59 PM Mote, Todd <[email protected]> > wrote: > > So I've written a fancy PowerShell script and given it a GUI and it works > great. As I add more features to it though, I find that it’s taking longer > and longer to run and thought I would try to get it to run in a separate > thread to free up the GUI. I’m not finding many resources to help me learn > how to do that. Can anybody point me to any? I know about sunspaces, bur > have not had any luck with getting them to work. Help? > > > > Sent from my Windows 10 phone > > > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 ================================================ Did you know you can also post and find answers on PowerShell in the forums? http://www.myitforum.com/forums/default.asp?catApp=1
