在 WPF 中水平和垂直居中 ListBoxItem 内容

Centering ListBoxItem content horizontally and vertically in WPF

我试图将我的 ListBoxItem 的内容垂直和水平居中,但我无法让它工作。

我的风格模板:

<Style x:Key="myListBoxItem" TargetType="ListBoxItem">
    <Style.Resources>
        <Style TargetType="Border">
            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect ShadowDepth="2" Direction="90" BlurRadius="4" Color="Black" Opacity="0.25"/>
                </Setter.Value>
            </Setter>
        </Style>
    </Style.Resources>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="#fe3f3f"/>
                        <Setter Property="Foreground" Value="White"/>
                        <Setter Property="FontWeight" Value="DemiBold"/>
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="True"/>
                            <Condition Property="IsSelected" Value="False"/>
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter Property="Background" Value="#e9e9e9"/>
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                            <Setter Property="Cursor" Value="Hand"/>
                        </MultiTrigger.Setters>
                    </MultiTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Width" Value="160"/>
    <Setter Property="Height" Value="75"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="FontSize" Value="19"/>
</Style>

以下是我应用此样式的方法:我的 XAML 中有一个简单的 ListBox,我在代码隐藏中将 ListBoxItems 附加到它。我通过这种方式将每个 ListBoxItem 的 ResourceReference 设置为我的样式:

foreach (var equipment in listEquipments)
{
      var lbi = new ListBoxItem();
      lbi.Content = equipment.Name;
      lbi.SetResourceReference(StyleProperty, "myListBoxItem");
      ListBox_Equipments.Items.Add(lbi);
}

我尝试将 ListBoxItem 的 HorizontalContentAlignmentHorizontalContentAlignment(通过样式模板)设置为 Center,以及 HorizontalAlignmentVerticalAlignment,但没有成功。我认为这可能与我的样式模板有关。

我也尝试了一些 ItemTemplates 例如:

<ListBox HorizontalContentAlignment="Center">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Text}" FontSize="72"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

到目前为止运气不好。

ItemTemplate 未应用于 ListBoxItem

ListBoxItemsSource 设置或绑定到您的 listEquipments:

ListBox_Equipments.ItemsSource = listEquipments;

...并将 ListBoxItemContainerStyle 设置为您的自定义 Style:

<ListBox x:Name="ListBox_Equipments"
         ItemContainerStyle="{StaticResource myListBoxItem}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>