-
Jul 22nd, 2019, 07:49 AM
#1
Thread Starter
New Member
Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
I am trying to get a progress bar to begin its automation in the click event of a button control and stop the automation on completion of the click event. Prior to that, I set the IsIndeterminate property to true and just hid the progress bar until the user clicks on my search button, which then, i would set the visibility to visible (or, value 0). None of these are working. Then, I tried to use both BeginInvoke and Invoke from the Dispatcher object. Still no luck. Then, I implemented INotifyPropertyChanged on my WPF window. Again, I would raise the event when the IsIndeterminate property was changed either from off to on or on to off on completion. Again, nothing is happening. Most of the examples for the progress bar online is using c# code. Most of the time, I am able to convert it but again, none of what I am attempted is working. I'm starting to think perhaps my install of Visual Studio could be missing something. Any help on this would be greatly appreciated. Thanks, South Side Rob
-
Jul 22nd, 2019, 02:03 PM
#2
Thread Starter
New Member
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
Here is just a taste of my code behind. When I step through the code, it actually changes the property of the progressbar (named pb) to IsIndeterminate, however, the UI never shows the animation. I even can comment out the 2nd Invoke statement in my btnSearch_Click event. When I do that, the animation begins after the event is completed (I love WPF except for UI control)
Code:
Private Sub btnSearch_Click(sender As Object, e As RoutedEventArgs) Handles btnSearch.Click
pb.Dispatcher.Invoke(AddressOf ChangeProgBar)
If ValidateMainWindow(Me) = True Then
ProcessDefaultQuery(Me)
End If
pb.Dispatcher.Invoke(AddressOf ChangeProgBar)
End Sub
Private Sub ChangeProgBar()
If pb.IsIndeterminate = False Then
pb.IsIndeterminate = True
Else
pb.IsIndeterminate = False
End If
End Sub
-
Jul 22nd, 2019, 02:05 PM
#3
Thread Starter
New Member
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
Here is just a taste of my code behind. When I step through the code, it actually changes the property of the progressbar (named pb) to IsIndeterminate, however, the UI never shows the animation. I even can comment out the 2nd Invoke statement in my btnSearch_Click event. When I do that, the animation begins after the event is completed (I love WPF except for UI control)
Code:
Private Sub btnSearch_Click(sender As Object, e As RoutedEventArgs) Handles btnSearch.Click
pb.Dispatcher.Invoke(AddressOf ChangeProgBar)
If ValidateMainWindow(Me) = True Then
ProcessDefaultQuery(Me)
End If
pb.Dispatcher.Invoke(AddressOf ChangeProgBar)
End Sub
Private Sub ChangeProgBar()
If pb.IsIndeterminate = False Then
pb.IsIndeterminate = True
Else
pb.IsIndeterminate = False
End If
End Sub
-
Jul 23rd, 2019, 08:40 AM
#4
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
Hi,
Can you please post the XAML that contains the DataGrid control and the IsIndeterminate property?
- kgc
-
Jul 23rd, 2019, 12:25 PM
#5
Thread Starter
New Member
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
Here you go. Thanks for looking at this. I really appreciate it. Since my post yesterday, I began to replace it with a label control that I am trying to use with a dispatchtimer object and I'm getting the same results. It only wants to run after the processing is completed. Maybe I need this broken up in different threads from the start..
Code:
<Window x:Class="MainWindow"
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:MaintGearSQL"
mc:Ignorable="d"
FontFamily="Candara" FontSize="14" Height="900" Title="MaintGearSQL" Width="1220">
<!--This sets defaults for controls-->
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="5" />
<Setter Property="Height" Value="22" />
<Setter Property="Width" Value="90" />
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
</Style>
<Style TargetType="ComboBox">
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Height" Value="22" />
<Setter Property="Margin" Value="5" />
<Setter Property="MaxWidth" Value="400" />
<Setter Property="MinWidth" Value="400" />
</Style>
<Style TargetType="DataGrid">
<Setter Property="Margin" Value="5" />
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
<Setter Property="MinHeight" Value="300" />
<Setter Property="MaxHeight" Value="300" />
</Style>
<Style TargetType="Label">
<Setter Property="Margin" Value="5" />
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
</Style>
<Style TargetType="TabItem">
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="5" />
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
</Style>
<Style TargetType="TextBox">
<Setter Property="Margin" Value="5" />
<Setter Property="Height" Value="22" />
<Setter Property="Width" Value="150" />
<Setter Property="FontFamily" Value="Candara" />
<Setter Property="FontSize" Value="14" />
</Style>
</Window.Resources>
<Grid Name="grdMain">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Row 0 -->
<Menu Grid.Row="0">
<MenuItem Header="_File" />
<MenuItem Header="_Edit" />
<MenuItem Header="_View" />
</Menu>
<!-- Row 1 -->
<TabControl Name="tcMain" Grid.Row="1">
<TabItem Name="tabDefaultQuery" Header="Default Query">
<Grid Name="grdDefaultQuery">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <!-- Row 0 -->
<RowDefinition Height="Auto" /> <!-- Row 1 -->
<RowDefinition Height="Auto" /> <!-- Row 2 -->
<RowDefinition Height="Auto" /> <!-- Row 3 -->
<RowDefinition Height="Auto" /> <!-- Row 4 -->
<RowDefinition Height="Auto" /> <!-- Row 5 -->
<RowDefinition Height="Auto" /> <!-- Row 6 -->
<RowDefinition Height="Auto" /> <!-- Row 7 -->
<RowDefinition Height="Auto" /> <!-- Row 8 -->
<RowDefinition Height="Auto" /> <!-- Row 9 -->
<RowDefinition Height="Auto" /> <!-- Row 10 -->
<!--<RowDefinition Height="*" /> Row 11 -->
<RowDefinition Height="Auto" /> <!-- Row 12 -->
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <!-- Col 0 -->
<ColumnDefinition Width="Auto" /> <!-- Col 1 -->
<ColumnDefinition Width="Auto" /> <!-- Col 2 -->
<ColumnDefinition Width="Auto" /> <!-- Col 3 -->
<ColumnDefinition Width="Auto" /> <!-- Col 4 -->
<ColumnDefinition Width="Auto" /> <!-- Col 5 -->
<ColumnDefinition Width="Auto" /> <!-- Col 6 -->
<ColumnDefinition Width="*" /> <!-- Col 7 -->
<ColumnDefinition Width="5" /> <!-- Col 8 -->
</Grid.ColumnDefinitions>
<!-- Row 0 -->
<Label Content="Tooth Form" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />
<ComboBox Name="cboToothForm" Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="4" ItemsSource="{Binding}" />
<!-- Row 1 -->
<Label Content="Teeth" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" />
<Label Content="From" Grid.Row="1" Grid.Column="2" />
<TextBox Name="txtTeethFrom" Grid.Row="1" Grid.Column="3" />
<Label Content="To" Grid.Row="1" Grid.Column="4" />
<TextBox Name="txtTeethTo" Grid.Row="1" Grid.Column="5" />
<!-- Row 2 -->
<Label Content="Pitch (Basic)" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" />
<Label Content="From" Grid.Row="2" Grid.Column="2" />
<TextBox Name="txtBasicPitchFrom" Grid.Row="2" Grid.Column="3" />
<Label Content="To" Grid.Row="2" Grid.Column="4" />
<TextBox Name="txtBasicPitchTo" Grid.Row="2" Grid.Column="5" />
<!-- Row 3 -->
<Label Content="Outside Diameter" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" />
<Label Content="From" Grid.Row="3" Grid.Column="2" />
<TextBox Name="txtOutsideDiameterFrom" Grid.Row="3" Grid.Column="3" />
<Label Content="To" Grid.Row="3" Grid.Column="4" />
<TextBox Name="txtOutsideDiameterTo" Grid.Row="3" Grid.Column="5" />
<!-- Row 4 -->
<Label Content="Face Width" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" />
<Label Content="From" Grid.Row="4" Grid.Column="2" />
<TextBox Name="txtFaceWidthFrom" Grid.Row="4" Grid.Column="3" />
<Label Content="To" Grid.Row="4" Grid.Column="4" />
<TextBox Name="txtFaceWidthTo" Grid.Row="4" Grid.Column="5" />
<!-- Row 5 -->
<Label Content="Finish Code" Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" />
<ComboBox Name="cboFinishCode" Grid.Row="5" Grid.Column="2" Grid.ColumnSpan="4" ItemsSource="{Binding}" />
<!-- Row 6 -->
<Label Content="Product Line" Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2" />
<ComboBox Name="cboProductLine" Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="4" ItemsSource="{Binding}" />
<!-- Row 7 -->
<Label Content="Part Type" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" />
<ComboBox Name="cboPartType" Grid.Row="7" Grid.Column="2" Grid.ColumnSpan="4" ItemsSource="{Binding}" />
<!-- Row 8 -->
<Label Content="Material" Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="2" />
<ComboBox Name="cboMaterial" Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="4" ItemsSource="{Binding}" />
<!-- Row 9 -->
<Label Content="Special Codes" Grid.Row="9" Grid.Column="0" Grid.ColumnSpan="2" />
<ComboBox Name="cboSpecialCodes" Grid.Row="9" Grid.Column="2" Grid.ColumnSpan="4" ItemsSource="{Binding}" />
<!-- Row 10 -->
<Button Name="btnDefaultClear" Grid.Row="10" Grid.Column="0" Grid.ColumnSpan="2" Content="Start Over" Width="Auto" />
<ProgressBar Name="pb" Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" />
<!-- Commented Out Alternative Solution Which is Not Working Either -->
<!-- <Label Name="lblDefaultProcessing" Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" /> -->
<Button Name="btnDefaultSearch" Grid.Row="10" Grid.Column="4" Grid.ColumnSpan="2" Content="Go" Width="Auto" />
<StackPanel Grid.Row="10" Grid.Column="6" Orientation="Horizontal" HorizontalAlignment="Left">
<Label Name="lblDefaultRecordsReturned" Width="Auto" />
<Button Name="btnDefaultSaveExcel" Width="Auto" />
<Label Name="lblDefaultStatusBar" Width="Auto" />
</StackPanel>
<!-- Row 11 -->
<ScrollViewer Grid.Row="11" Grid.Column="0" Grid.ColumnSpan="8" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<DataGrid Name="dgDefault" ItemsSource="{Binding}" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"/>
</ScrollViewer>
</Grid>
</TabItem>
-
Jul 23rd, 2019, 03:35 PM
#6
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
Did you set the style on the progress bar to Marquee?
-tg
-
Jul 24th, 2019, 06:26 AM
#7
Thread Starter
New Member
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
No. I didn't even know of that property for the progress bar. I may have figured it out. When non-ui processes are mixed in with ui-updates, everything seems to run synchronously. I think if I put all my db retrieval in a backgroundworker and use the progress updates, I might be able to get things working. That was my mistake. I'm used to writing automation packages that do not even have a user interface. I will verify later today. Thanks
-
Jul 24th, 2019, 06:58 AM
#8
Re: Cannot seem to change Progress Bar properties or visibility in WPF / VB.Net
I think if I put all my db retrieval in a backgroundworker and use the progress updates.
Yes, that would be the solution. The db related tasks should be on a separate thread(BackgroundWorker or Task).
- kgc
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|