Chcę mieć ListItems, aby rozszerzyć ich pomarańczowym tłem na pełną szerokość Listbox.
Obecnie są one tak szerokie, jak FirstName + LastName.
Ustawiłem każdy element, który mogę: HorizontalAlignment = "Stretch".
Chcę, aby tło ListboxItems rozszerzyło się, gdy użytkownik rozciąga Listbox, więc nie chcę wprowadzać wartości bezwzględnych.
Co muszę zrobić, aby kolor tła ListBoxItems wypełniał szerokość ListBox?
<Window x:Class="TestListBoxSelectedItemStyle.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestListBoxSelectedItemStyle"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:CustomerViewModel x:Key="TheDataProvider"/>
<DataTemplate x:Key="CustomerItemTemplate">
<Border CornerRadius="5" Background="Orange" HorizontalAlignment="Stretch" Padding="5" Margin="3">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Width="Auto">
<TextBlock HorizontalAlignment="Stretch">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=GetAllCustomers, Source={StaticResource TheDataProvider}}"
ItemTemplate="{StaticResource CustomerItemTemplate}"/>
</Grid>
</Window>
xaml
listboxitem
Edward Tanguay
źródło
źródło
Znalazłem tutaj inne rozwiązanie , ponieważ wpadłem na oba posty ...
To jest odpowiedź Mylesa:
To zadziałało dla mnie.
źródło
Jeśli twoje przedmioty są szersze niż
ListBox
, inne odpowiedzi tutaj nie pomogą: przedmioty wItemTemplate
pozostałych są szersze niżListBox
.Rozwiązaniem, które działało dla mnie, było wyłączenie poziomego paska przewijania, który najwyraźniej mówi również, że kontener wszystkich tych elementów ma pozostać tak szeroki, jak pole listy.
Dlatego łączna poprawka, aby uzyskać elementy ListBox, które są tak szerokie jak pole listy, niezależnie od tego, czy są mniejsze i wymagają rozciągania, czy szersze i wymagają zawijania, wygląda następująco:
( kredyty za pomysł paska przewijania )
źródło
Ponieważ ramka służy tylko do wyglądu, możesz umieścić ją w ControlTemplate ListBoxItem i zmodyfikować tam właściwości. W ItemTemplate można umieścić tylko StackPanel i TextBlock. W ten sposób kod również pozostaje czysty, ponieważ wyglądem formant będzie kontrolowany za pomocą ControlTemplate, a wyświetlane dane będą kontrolowane za pomocą DataTemplate.
źródło
Rozwiązaniem dla mnie było, aby ustawić właściwości
HorizontalAlignment="Stretch"
naItemsPresenter
środkuScrollViewe
r ..Mam nadzieję, że to pomoże komuś ...
źródło
Miałem również ten sam problem, ponieważ w celu szybkiego obejścia tego problemu użyłem metody mieszania. W moim przypadku było to 12, więc użyłem ujemnego marginesu, aby się go pozbyć. Teraz wszystko można teraz poprawnie wyśrodkować
źródło