WPF таблица с возм. изменения разм. строк и столбцов

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

WPF таблица с возм. изменения разм. строк и столбцов

Сообщение EXIS » 23.10.2008 (Чт) 10:29

Установил халявную Visual Studio 2008 Express. Там есть шаблон WPF Application. WPF = Windows Presentation Foundation
http://msdn.microsoft.com/en-us/library/ms742119.aspx
Если честно я не в курсе что это за технология WPF. Но как я понял возможности WPF в плане дизайна гораздо шире чем у обычных Application.

В WPF есть элемент Grid. Добовлять строки и столбцы я уже научился, единственное чего не пойму, как сделать так что-бы с помощью мыши можно было изменять размеры строк и столбцов как в обычном DataGridView?

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: WPF таблица с возм. изменения разм. строк и столбцов

Сообщение EXIS » 23.10.2008 (Чт) 19:20

Как-то так но это только наброски :bom:

Код: Выделить всё
<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="330" Width="408">
    <Grid>
        <Grid Name="Grid1" ShowGridLines="True" Background="Lime"  Margin="41,23,45,69">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
    </Grid>
        <TextBox Height="40" Margin="44,0,124,16" Name="TextBox1" VerticalAlignment="Bottom" TextWrapping="Wrap" />
        <Button Height="40" HorizontalAlignment="Right" Margin="0,0,45,16" Name="Button1" VerticalAlignment="Bottom" Width="67">Button</Button>
    </Grid>
</Window>


Код: Выделить всё
Class Window1

    Dim SelectedColumn As Integer = Nothing
    Dim SelectedColumnX As Integer

    Private Sub Grid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Grid1.MouseDown
        Dim SelColumn As Integer = 0
        Dim x As Integer = 0
        Dim msx As Integer = e.MouseDevice.GetPosition(sender).X
        Dim ColumnSelected As Boolean = False

        If e.LeftButton = MouseButtonState.Pressed Then
            For Each col As ColumnDefinition In Grid1.ColumnDefinitions
                x += Int(col.ActualWidth)
                If msx < x + 3 And msx > x - 3 Then
                    ColumnSelected = True
                    Exit For
                End If
                SelColumn += 1
            Next col

            If ColumnSelected = True Then
                TextBox1.Text = "Выделена граница стлобца номер: " & Val(SelColumn)
                SelectedColumn = SelColumn
                SelectedColumnX = x
            Else
                TextBox1.Text = "Ни одна граница столбца не выделена"
                SelectedColumn = Nothing
            End If
        End If

    End Sub

    Private Sub Grid1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Grid1.MouseMove
        Dim x As Integer = 0
        Dim msx As Integer = e.MouseDevice.GetPosition(sender).X

        If SelectedColumn = Nothing Then
            Dim MouseOnColumnBorder As Boolean = False
            For Each col As ColumnDefinition In Grid1.ColumnDefinitions
                x += Int(col.ActualWidth)
                If msx < x + 3 And msx > x - 3 Then
                    MouseOnColumnBorder = True
                End If
            Next col
            If MouseOnColumnBorder = True Then
                Grid1.Background = Brushes.Gainsboro
                Cursor = Cursors.SizeWE
            Else
                Grid1.Background = Brushes.Lime
                Cursor = Cursors.Arrow
            End If
        Else
            Grid1.ColumnDefinitions(SelectedColumn).Width = New GridLength(Grid1.ActualWidth - CDbl(msx))
        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        For Each col As ColumnDefinition In Grid1.ColumnDefinitions
            TextBox1.Text &= Int(col.ActualWidth)
        Next col

        'Grid1.ColumnDefinitions(0).Width = New GridLength(10.0)

        'For Each col As ColumnDefinition In Grid1.ColumnDefinitions
        'col.Width = New GridLength(10.0)
        'Next col

        TextBox1.Text &= " " & SelectedColumnX
        Dim tb As New TextBlock
        tb.Text = "Привет!"
        tb.TextAlignment = TextAlignment.Center
        Grid1.Children.Add(tb)
        Grid.SetColumn(tb, 2)
        Grid.SetRow(tb, 2)
    End Sub

    Private Sub Grid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Grid1.MouseUp
        If e.LeftButton = MouseButtonState.Released Then
            SelectedColumn = Nothing
        End If
    End Sub
End Class

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: WPF таблица с возм. изменения разм. строк и столбцов

Сообщение EXIS » 24.10.2008 (Пт) 22:09

Все оказалось немного проще нужно использовать GridSplitter

Код: Выделить всё
<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid MaxWidth="100">
        <!-- Define columns -->
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width ="10"/>
            <ColumnDefinition Width ="10"/>
            <ColumnDefinition Width ="10"/>
            <ColumnDefinition Width ="10"/>
        </Grid.ColumnDefinitions>
        <!-- Add this label to cell 0 -->
        <Label Name="lblLeft" Background ="GreenYellow" Grid.Column="0" Content ="Left!"/>
        <!-- Add this label to cell 1 -->
        <Label Name="lblRight" Grid.Column ="1" Content ="Right!"/>
        <Label Name="lblRight2" Grid.Column ="2" Content ="Right!"/>
        <!-- Define the splitter -->
        <GridSplitter Grid.Column ="0" Width ="5"/>
        <GridSplitter Grid.Column ="1" Width ="5"/>
        <GridSplitter Grid.Column ="2" Width ="5"/>
    </Grid>
</Window>


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 92

    TopList  
cron