Dot-Net
將列錶框項目的點擊區域拉伸到列錶框的整個寬度?ListBox 樣式是通過主題隱式設置的
我已經四處尋找答案,但潛在的重複更關心展示而不是互動。
我有一個基本的列錶框,每個項目的內容都是一個簡單的字元串。
ListBox 本身被拉伸以填充它的網格容器,但每個 ListBoxItem 的命中區域並不反映 ListBox 的寬度。看起來好像每個項目的 hitarea(指針接觸區域)只是文本內容的寬度。無論文本大小如何,我如何讓這個一直延伸。
我已將 HorizontalContentAlignment 設置為 Stretch,但這並不能解決我的問題。我唯一的另一個猜測是內容實際上是在拉伸,但背景是不可見的,因此沒有擷取滑鼠指針。
<ListBox Grid.Row="1" x:Name="ProjectsListBox" DisplayMemberPath="Name" ItemsSource="{Binding Path=Projects}" SelectedItem="{Binding Path=SelectedProject}" HorizontalContentAlignment="Stretch"/>XAML 在這方面非常簡單。如果我將滑鼠懸停在其中一個項目中的文本上,則項目的整個寬度都會變為活動狀態。我想我只需要知道如何創建一個不可見的互動式背景。
HorizontalContentAlignment="Stretch"應該在 ItemContainerStyle 中設置它才能工作。Xaml 範例
<ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib"> <ListBox.ItemsSource> <x:Array Type="{x:Type sys:String}"> <sys:String>String 1</sys:String> <sys:String>String 2</sys:String> <sys:String>String 3</sys:String> <sys:String>String 4</sys:String> </x:Array> </ListBox.ItemsSource> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListBox.ItemContainerStyle> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" Background="Green"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>更新
試試這個
<ListBox ...> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListBox.ItemContainerStyle>