Da się dodać wiersz tylko do 1 kolumny ?

0

Witajcie! Mam takie sobie coś:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80" MaxWidth="80"/>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="1*" MinWidth="80"/>
        </Grid.ColumnDefinitions>
        <GridSplitter Grid.Column="0" Width="3"></GridSplitter>
        <GridSplitter Grid.Column="1" Width="3"></GridSplitter>
    </Grid>

Potrzebuję teraz dodać w kolumnie o indeksie 1 jeden wiersz, aby dodać tam Splittera ( w miejscu czarnej linii ):
d82948df80.png

Jest to możliwe? Jeżeli nie w jaki sposób rozwiązać ten problem? Chcę mieć coś na zasadzie jak w VS, że można dowolnie manipulować rozmiarem buttonów, list w ten sposób.
3834831a92.png

Macie jakąś radę?

2
<Window x:Class="_4programmersWPF.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:_4programmersWPF"
        mc:Ignorable="d"
        Title="My own Visual Studio" Height="423" Width="611"
        Name="Window" WindowStartupLocation="CenterScreen">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="4*"/>
      <ColumnDefinition Width="2"/>
      <ColumnDefinition Width="2*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="4*"/>
      <RowDefinition Height="2"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    
    <GridSplitter Grid.Column="0" Grid.Row="1" Height="2"
                  HorizontalAlignment="Stretch"/>
    <GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" Width="2"
                  HorizontalAlignment="Stretch"/>    
    
    <TextBox Grid.Column="0" Grid.Row="0" Margin="2"/>
    <TextBox Grid.Column="0" Grid.Row="2" Margin="2"/>
    <TextBox Grid.Column="2" Grid.Row="0" Grid.RowSpan="3" Margin="2"/>    
    
  </Grid>
</Window>
0

Ok poradziłem sobie :) Dalej póki co ćwiczę układanie kontrolek.

<Window x:Class="_4programmersWPF.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:_4programmersWPF"
        mc:Ignorable="d"
        Title="My own Visual Studio" Height="423" Width="611"
        Name="Window" WindowStartupLocation="CenterScreen">
    <Grid Background="#FFE4DADA">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80" MaxWidth="80"/>
            <ColumnDefinition Width="5*" MinWidth="20"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="4*"/>
            <RowDefinition Height="2"/>
            <RowDefinition Height="80" MaxHeight="80" MinHeight="24"/>
        </Grid.RowDefinitions>

        <GridSplitter Grid.Column="0" Width="4" Background="AliceBlue"/>
        <GridSplitter Grid.Column="1" Grid.Row="1" Height="2" HorizontalAlignment="Stretch" Background="AliceBlue"/>
        <GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" Width="4" Background="AliceBlue"/>

        <ListBox Grid.Column="0" Grid.Row="0" Margin="4" Background="#FFDFDFDF">
        </ListBox>

        <ComboBox Background="#FFDFDFDF" Grid.Column="2" Grid.Row="0" Height="16" VerticalAlignment="Top" Margin="4,0">
        </ComboBox>
        <ListBox Background="#FFDFDFDF" Grid.Column="2" Grid.Row="0" Margin="4, 17, 4, 4">
        </ListBox>
    </Grid>
</Window>

Jak sądzicie nie powinienem opakować tego comboboxa i listboxa we wrap panel?

2

Jak sądzicie nie powinienem opakować tego comboboxa i listboxa we wrap panel?

Nie ma takiej potrzeby, bo to i tak niczego nie zmieni ale prościej byłoby Ci formatować GUI jeżeli zrobiłbyś sub-gridy. Jest to szczególnie pomocne kiedy dochodzi duża liczba kontrolek do pozycjonowania. Stackpanele przydają się np. w buttonach kiedy chcemy zrobić ładną ikonkę, a obol Label. Tutaj WPF jest bardzo elastyczny.

0

Ps. Udało mi się poprawnie zbindować coś w wpf :D jestem z siebie dumny ^^
Next:

http://4programmers.net/Pastebin/5641
Nie mam pojęcia jak sprawić, aby w ListView:

  1. Pierwsza kolumna miała stałą szerokość i przylegała do lewego brzegu;
  2. Trzecia kolumna miała stałą szerokość i przylegała do prawego brzegu;
  3. Druga kolumna rozciągała się tak, aby przylegać zawsze do pierwszej i drugiej

Nie ma tu ani min/max Width, Size, Rościągania ani nic :( Możesz mnie odesłać do jakiegoś linku? Bo nie mogę nic na ten temat znaleźć. Jedyne co, to znalazłem AllowsColumnReorder ażeby nie można było przenosić kolumn między sobą.

0

http://4programmers.net/Pastebin/5644
To pewnie gdzieś w property bo tu są chyba wszystkie ustawienia kolumny, mam rację?

0

Zainteresuj się właściwością samego ListBox czyli HorizontalContentAlignment="Stretch".

0

To ListView, według tego, co wyczytałem za jakiekolwiek ustawienia odpowiada teraz

<ListView.View>
 <GridView>

A dodanie

<ListView Name="hPlayList" Background="#33DFDFDF" Grid.Column="2" Grid.Row="0" Margin="4, 17, 4, 0" HorizontalContentAlignment="Stretch"> 

nic nie poprawia.

1

Czyżby?

6446d16323.png

Parametr Name nie jest potrzebny.

<Window x:Class="_4programmersWPF.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:_4programmersWPF"
        mc:Ignorable="d"
        Title="4prog test app" Height="370" Width="400"
        Name="Window" WindowStartupLocation="CenterScreen">
  <Window.DataContext>
    <local:Viewmodel/>
  </Window.DataContext>
  <Grid>
    <ListBox ItemsSource="{Binding Persons, UpdateSourceTrigger=PropertyChanged}"
             HorizontalContentAlignment="Stretch">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <Grid>
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="*"/>
              <ColumnDefinition Width="*"/>
              <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
              <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <Label Grid.Row="0" Grid.Column="0"
                   Background="{Binding CellColor}"
                   Content="{Binding Name}"/>
            <Label Grid.Row="0" Grid.Column="1"
                   Background="{Binding CellColor}"
                   Content="{Binding Surname}"/>
            <Label Grid.Row="0" Grid.Column="2"
                   Background="{Binding CellColor}"
                   Content="{Binding Age}"/>
          </Grid>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
  </Grid>
</Window>
1

A to ja głupi. Tutaj aktualizacja kodu : /

<Window x:Class="Odtwarzacz_muzyczny.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Background="#FFE4DADA">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80" MaxWidth="80"/>
            <ColumnDefinition Width="5*" MinWidth="4"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="4*"/>
            <RowDefinition Height="2"/>
            <RowDefinition Height="80" MaxHeight="80"/>
        </Grid.RowDefinitions>

        <GridSplitter Grid.Column="0" Grid.RowSpan="2" Width="3" Background="DarkGray"/>
        <GridSplitter Grid.Column="1" Grid.Row="1" Height="2" HorizontalAlignment="Stretch" Background="DarkGray"/>
        <GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Width="3" Background="DarkGray"/>

        <!--LISTA PLUGINOW-->
        <ListBox Name="hPluginList" Grid.Column="0" Grid.Row="0" Margin="4,4,4,0" Background="#FFDFDFDF">
        </ListBox>

        <!--LISTA ODTWARZANIA = WYSZUKIWANIE-->
        <ComboBox Name="hPlayListSearch" Background="#33DFDFDF" Grid.Column="2" Grid.Row="0" Height="16" VerticalAlignment="Top" Margin="4,0"/>

        <!--LISTA ODWARZANIA = LISTVIEW-->
        <ListView Name="hPlayList" Background="#33DFDFDF" Grid.Column="2" Grid.Row="0" Margin="4, 17, 4, 0" HorizontalContentAlignment="Stretch">
            <ListView.View>
                <GridView AllowsColumnReorder="False">
                    <GridView.ColumnHeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding}" FontWeight="Black"/>
                        </DataTemplate>
                    </GridView.ColumnHeaderTemplate> <!--Dane wnętrza kolumn-->
                    <GridView.ColumnHeaderContainerStyle>
                        <Style TargetType="GridViewColumnHeader">
                            <Setter Property="Height" Value="12"/>
                            <Setter Property="FontSize" Value="8"/>
                            <Setter Property="BorderBrush" Value="Brown"/>
                        </Style>
                    </GridView.ColumnHeaderContainerStyle> <!--Style kolumn-->
                    <GridView.Columns>
                        <GridViewColumn Header=" " Width="16"> <!--IKONA-->
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=Icon}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>   
                        <GridViewColumn Header="Name" Width="100"> <!--NAME-->
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=Name}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Time" Width="35"> <!--TIME-->
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=Time}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView.Columns> <!--Dane kolumn-->
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window> 
0

Używam kolekcji

namespace Odtwarzacz_muzyczny
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        cPlayList PlayList = new cPlayList();
        public MainWindow()
        {
            InitializeComponent();
            PlayList.SetControlSource(ref hPlayList);
        }
    }
} 

EDIT>:
Już się zczaiłem, że nie o te Name Ci chodzi ;P

namespace Odtwarzacz_muzyczny
{
    public class cPlayList
    {
        private ObservableCollection<PlayListTrackData> TracksData;
        public cPlayList()
        {
            TracksData = new ObservableCollection<PlayListTrackData>();
            TracksData.Add(new PlayListTrackData { Icon = "1", Name = "Canon Rock", Time = "03:11" });
            TracksData.Add(new PlayListTrackData { Icon = "2", Name = "Łydka Grubasa", Time = "02:43" });
            TracksData.Add(new PlayListTrackData { Icon = "3", Name = "Nothing Else Matters", Time = "11:01" });
            TracksData.Add(new PlayListTrackData { Icon = "4", Name = "Just Like Tiger Woods", Time = "32:52" });
            TracksData.Add(new PlayListTrackData { Icon = "5", Name = "Canon Rock", Time = "03:59" });

            
        }
        public void SetControlSource(ref ListView Object)
        {
            Object.ItemsSource = TracksData;
        }
        public void SetControlSource(ref ListBox Object)
        {
            Object.ItemsSource = TracksData;
        }
        public void SetControlSource(ref ComboBox Object)
        {
            Object.ItemsSource = TracksData;
        }
    }
    public class PlayListTrackData
    {
        public string Icon { get; set; }
        public string Name {get; set; }
        public string Time {get; set; }
    }
} 

Więc muszę wpisać Name aby odczytało mi odpowiednią zmienną, chyba xd

0

chodzi mi o uzyskanie efektu jak na obrazku 3706d36d33.png

1

Ta klasa jest trochę bez sensu, bo wszystko to możesz zrobić zwykłym bindowaniem datacontextu do xaml'a. Nawet nie musisz używać do tego mvvm jeżeli nie znasz. Starczy, że ustawisz this.DataContext = this; i zaczniesz bindować dane do klas, które masz w code-behind,

0

Według http://stackoverflow.com/questions/2834971/listview-column-auto-sizing powinienem wstawić * w szerokość kolumn, ale niestety wyskakuje mi błąd, że szerokość musi być liczbą.

<GridView.Columns>
                        <GridViewColumn Header=" " Width="*"> <!--IKONA-->
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=Icon}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn> 

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