Datagrid ProgressBar w kolumnie

Odpowiedz Nowy wątek
2015-02-18 22:38
0

Witam wszystkich,
jako początkujący amator w programowaniu zwracam się do was z moim problemem. Porwałem się ostatnio z motyka na słońce i postanowiłem napisać program typu organizer. Aplikacja jest WPF pisana w vb (platforma .net 4.5). Jedną z głównych części jest datagrid zbindowany z plikiem .xml. W jednej z kolumn Datagrid umieszczony mam PorgressBar + Label. PorgressBar pokazuje zaawansowanie trwającego zadania (czas) wszystko ładnie działa. Problem w tym, że wpadłem na pomysł, żeby zrobić tak, że gdy ProgressBar dojdzie do 100% zmieni kolor. I tutaj mam schody chciałbym się dowiedzieć jak uzyskać dostęp do tej kontrolki z poziomu vb aby zmienić jej kolor na podstawie wskazywanej wartości. Generalnie mam jeszcze lekki problem z bardziej zaawansowanym łączeniem .xaml z vb dlatego, jeśli ktoś jest na tyle uprzejmy w miarę prosty sposób wyjaśnić jak do tego podejść będę dozgonnie wdzięczny. Niestety próby dokształcenia się w internecie oraz z książek skończyły się fiaskiem, dlatego proszę o pomoc.
Próbowałem zrobić to z poziomu .xaml i ustawić DataTrigger rozwiązanie działa, ale jeżeli normalny kolor ProgressBar-a jest domyślny (zielony). Kolor normalny paska ustawiony mam w ten sposób:


<ProgressBar.Foreground>
   <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
      <GradientStop Color="#FF097BD4" Offset="0"/>
      <GradientStop Color="#FF074F88" Offset="0.7"/>
   </LinearGradientBrush>
</ProgressBar.Foreground>

DataTrigger wtedy mi nie działa, przy okazji jeśli ktoś wie proszę o informację dlaczego. Niemniej jednak chciałbym obsłużyć ProgressBar z poziomu VB.
Z góry dziękuje za odpowiedź i pozdrawiam

Pozostało 580 znaków

2015-02-18 23:40
0

Pokaż więcej kodu.

Pozostało 580 znaków

2015-02-19 17:27
0

Żeby nie zapychać niepotrzebnym kodem wrzucam DataGrid z tylko jedną z kolumną.
Jeżeli chodzi o xaml to:

<Window
    xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="clr-namespace:ORGANIZER" xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2" x:Class="MainWindow"
   Title="TLD-CAD" Height="580" Width="750" Background="{x:Null}" Foreground="Black" AllowsTransparency="True" WindowStyle="None" Margin="0,0,0,0" ResizeMode="CanResizeWithGrip" MinHeight="580" MinWidth="750">
         <Window.Resources>
        <CollectionViewSource x:Key="TableViewSource" />
    </Window.Resources>
<DataGrid x:Name="Datagrid1" ItemsSource="{Binding}" Margin="10,122,10,23" Background="{x:Null}" Foreground="White" BorderBrush="{x:Null}" AutoGenerateColumns="False" ScrollViewer.CanContentScroll="True" HorizontalScrollBarVisibility="Disabled" CanUserAddRows="False" RowDetailsVisibilityMode="Collapsed" >

<DataGrid.Columns>
  <DataGridTemplateColumn x:Name="Progress_BarColumn"  Header="ZAAWANSOWANIE" Width="90" MinWidth="90" >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Border Name="ProgressBarBorder" BorderBrush="#FFE06767" BorderThickness="1" Margin="2">
                                <Grid>
                                    <ProgressBar Name ="ProgressBar1" Grid.Row="0" Grid.Column="0"  Minimum="0" Maximum="100" Value="{Binding progress_bar, Mode=OneWay}" ToolTip="{Binding progress_bar, Mode=OneWay}" Background="{x:Null}" BorderBrush="{x:Null}" BorderThickness="0" Margin="3" ForceCursor="False">

                                        <ProgressBar.Foreground>
                                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                <GradientStop Color="#FF097BD4" Offset="0"/>
                                                <GradientStop Color="#FF074F88" Offset="0.7"/>
                                            </LinearGradientBrush>
                                        </ProgressBar.Foreground>

                                    </ProgressBar>
                                    <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding progress_bar_txt, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Grid>
                            </Border>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

Jeżeli chodzi o VB to:

Wczytanie danych nazwy plików zdanymi mam w ComboBox i zmieniam sobie tak źródło:

Imports System.Data
Class MainWindow
    Private dt As DataTable
    Private ds As DataSet
    Private zrodlo As String
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles MyBase.Loaded
        ds = New DataSet()
        dt = New DataTable("Customer")
        dt.Columns.Add("progress_bar")
        dt.Columns.Add("progress_bar_txt")
        ds.Tables.Add(dt)
        Datagrid1.ItemsSource = dt.DefaultView

        Dim katalog As New IO.DirectoryInfo("../")
        Dim plik As IO.FileInfo() = katalog.GetFiles()
        Dim nazwa As IO.FileInfo

        For Each nazwa In plik
            If nazwa.Extension = ".xml" Then
                ComboBox_lista.Items.Add(System.IO.Path.GetFileNameWithoutExtension(nazwa.Name))
                ComboBox_lista.SelectedIndex = 0
                zrodlo = "../" & Convert.ToString(ComboBox_lista.SelectedItem) & ".xml"
            End If
        Next
        dt.Clear()
        Try
            dt.ReadXml(zrodlo)

        Catch ex As Exception
            MessageBox.Show("Nie znaleziono pliku")
        End Try
        obliczenia_progress_bar()
    End Sub
End Class

Kodu mam sporo wiec starałem się wybrać co istotne. Pytanie jak dobrać się do parametrów ProgressBar (kolor, wartość max itp.) z poziomu VB? Proszę o podpowiedzi. Z góry dziękuje.

edytowany 1x, ostatnio: Mathewoosh, 2015-02-23 21:58

Pozostało 580 znaków

2015-02-23 22:03
0

Czy mogę chociaż prosić o odpowiedz czy to możliwe, aby nadawać inne parametry ProgressBar umieszczonych w jednej kolumnie w różnych komórkach. Przekopuje internet i nie znalazłem odpowiedzi.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0