Co to za bonusowa kolumna w moim GridView...?

0

Mam ListView, które wyświetla treści w GridView. Muszę zrobić dość zaawansowane zabawy z GridViewColumnHeader, więc zaczęłam definiować ControlTemplate, w którym zrobię wkrótce moje czary mary. Mam na razie jednak pierwszy zonk - zamiast dwóch kolumn, widzę 3. Trzecia jest pusta, żadnej zawartości i header bez nazwy, ale ewidentnie jest... Skąd się wzięła, gdzie jej szukać? Poniższy kod wyświetla 3 TextBoxy, z czego dwa wyświetlają "Test 1" i "Test 2", a trzeci jest pusty...

<Style x:Key="ColumnHeaderContainerStyle" TargetType="GridViewColumnHeader">	
	<Setter Property="Template">
		<Setter.Value>
			<ControlTemplate TargetType="GridViewColumnHeader">
				<StackPanel>
					<TextBox x:Name="ContentHeaderTextBlock" Text="{TemplateBinding Content}" Padding="5,5,5,0" Width="{TemplateBinding Width}" TextAlignment="Center" />
				</StackPanel>
			</ControlTemplate>
		</Setter.Value>
	</Setter>
</Style>       

<ListView Grid.Row="1" x:Name="MyItemsList"
		Style="{StaticResource MyItemsListView}"
		HorizontalAlignment="Stretch"
		ItemsSource="{Binding MyItems}">
	<ListView.View>
		<GridView ColumnHeaderContainerStyle="{StaticResource ColumnHeaderContainerStyle}">                        
			<GridViewColumn Header="Test 1" Width="200" DisplayMemberBinding="{Binding Something}" />
			<GridViewColumn Header="Test 2" Width="Auto" DisplayMemberBinding="{Binding SomethingElse}" />
		</GridView>
	</ListView.View>
</ListView>
0

A mógłbyś pokazać screena?

0

A proszę o screena, bo to może nie być kolumna tylko dopełnienie grida do wymaganej szerokości

Ooo a mógłbyś powiedzieć coś więcej? Przede wszystkim - jak się tego pozbyć? :P No faktycznie się rozciąga razem z okienkiem, ale scrolle żadne się nie pojawiają. Nie jestem 100% pewna, czy jakieś style nie chowają scrollbarów...

Screen raczej wiele ci nie pokaże, no ale masz:
listview.png

Tyle mogę pokazać, bez ujawniania co to za produkt ;)

4

A jednak udało się szybciej: Spróbuj na start ListView zaopatrzyć w HorizontalAlignment w wartość left. U mnie to działa na DataGrid tak:
Bez:

<Grid>
        <DataGrid>
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="kolumna 1"/>
                <DataGridTemplateColumn Header="kolumna 2"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

screenshot-20210318073945.png

Oraz z:

<Grid>
        <DataGrid HorizontalAlignment="Left">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="kolumna 1"/>
                <DataGridTemplateColumn Header="kolumna 2"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

screenshot-20210318074058.png

Jeżeli chcesz nadal mieć HorizontalAlignment=stretch trzeba będzie ustawiać szerokość kolumn tak, aby wypełniały całą szerokość Twojego ListView. Zrobisz to na przykład następująco:

<DataGrid>
            <DataGrid.Columns>
                <DataGridTemplateColumn Width="*" Header="kolumna 1"/>
                <DataGridTemplateColumn Header="kolumna 2"/>
            </DataGrid.Columns>
        </DataGrid>

screenshot-20210318074512.png
screenshot-20210318074536.png

Jeżeli oczekujesz innego efektu to opisz go i będziemy działać ;)

A właśnie, napisałaś:
"ale scrolle żadne się nie pojawiają. Nie jestem 100% pewna, czy jakieś style nie chowają scrollbarów"

Nie widać scrollbarów, ponieważ Twój GridView jest mniejszy od kontrolki nadrzędnej, czyli np. Grid'a. Twój GridView musiałby mieć dużo kolumn i wychodzić z tego powodu aż poza okno, wtedy przy fladze <DataGrid HorizontalScrollBarVisibility="Auto"> pojawiłby się scrollbar :)

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