Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将列表框项目命中区域拉伸到列表框的全宽?ListBox样式是通过主题隐式设置的_.net_Wpf_Xaml_Listbox_Listboxitem - Fatal编程技术网

.net 将列表框项目命中区域拉伸到列表框的全宽?ListBox样式是通过主题隐式设置的

.net 将列表框项目命中区域拉伸到列表框的全宽?ListBox样式是通过主题隐式设置的,.net,wpf,xaml,listbox,listboxitem,.net,Wpf,Xaml,Listbox,Listboxitem,我四处寻找答案,但潜在的复制品更关心的是展示而不是互动 我有一个基本的列表框,每个项目的内容都是一个简单的字符串 ListBox本身被拉伸以填充其网格容器,但每个ListBoxItem的hitarea并不镜像ListBox的宽度。看起来似乎每个项目的hitarea(指针接触区域)只是文本内容的宽度。无论文本大小如何,我如何将此拉伸到整个方向 我已将HorizontalContentAlignment设置为“拉伸”,但这并不能解决我的问题。我唯一的另一个猜测是,内容实际上在拉伸,但背景是不可见的,

我四处寻找答案,但潜在的复制品更关心的是展示而不是互动

我有一个基本的列表框,每个项目的内容都是一个简单的字符串

ListBox本身被拉伸以填充其网格容器,但每个ListBoxItem的hitarea并不镜像ListBox的宽度。看起来似乎每个项目的hitarea(指针接触区域)只是文本内容的宽度。无论文本大小如何,我如何将此拉伸到整个方向

我已将HorizontalContentAlignment设置为“拉伸”,但这并不能解决我的问题。我唯一的另一个猜测是,内容实际上在拉伸,但背景是不可见的,因此无法捕捉鼠标指针

<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>

字符串1
字符串2
字符串3
字符串4
更新
试试这个



另外,在Fredrik的回答中,如果您将列表框的
ScrollViewer.HorizontalScrollBarVisibility
属性设置为
已禁用
,则这些项目将始终与列表框的客户端宽度完全相同。

是否有方法在不覆盖我当前选择的样式的情况下执行此操作?我正在使用一个外部主题,我不想编辑它。如果我在列表框本身上这样做,它似乎会完全覆盖我的样式。@Meleak非常感谢你给了我一些关于这个的想法,但是你的示例(和更新)仍然覆盖了我的主题。@Nicholas:你的ListBoxItem样式是否有一个
x:Key
值,或者是隐式设置的?我在您发布的Xaml中没有看到和ItemsContainerStyle,所以我假设是隐式集,在这种情况下,我认为我的更新应该work@Nicholas:太好了:)没问题
<ListBox ...>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>