Dot-Net

將列錶框項目的點擊區域拉伸到列錶框的整個寬度?ListBox 樣式是通過主題隱式設置的

  • April 20, 2015

我已經四處尋找答案,但潛在的重複更關心展示而不是互動。

我有一個基本的列錶框,每個項目的內容都是一個簡單的字元串。

ListBox 本身被拉伸以填充它的網格容器,但每個 ListBoxItem 的命中區域並不反映 ListBox 的寬度。看起來好像每個項目的 hitarea(指針接觸區域)只是文本內容的寬度。無論文本大小如何,我如何讓這個一直延伸。

我已將 Horizo​​ntalContentAlignment 設置為 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>

引用自:https://stackoverflow.com/questions/4634196