Wpf Listbox выровнять конкурс вправо

#c# #wpf

#c# #wpf

Вопрос:

Приведенный ниже код не выравнивает текст по правому краю. Если я не использую Window.Ресурсы (я хочу изменить цвет выбранного элемента) код работает. Не могли бы вы мне помочь, пожалуйста?

  <Window.Resources>
            <Style x:Key="_ListBoxItemStyle" TargetType="ListBoxItem">            
            <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Border Name="_Border"
                                Padding="2"
                                SnapsToDevicePixels="true">
                                <ContentPresenter />
                            </Border>
                            
                            
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter TargetName="_Border" Property="Background" Value="Gray"/>
                                    <Setter Property="Foreground" Value="Yellow"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>        
        </Style>
        </Window.Resources>
 <ListBox x:Name="myListBox" ItemContainerStyle="{DynamicResource _ListBoxItemStyle}" Margin="0,20,0,30" 
                 VerticalAlignment="Top" Width="800" HorizontalAlignment="Right"  MinHeight="200" ScrollViewer.HorizontalScrollBarVisibility="Disabled"  
                  SelectionChanged="myListBox_SelectionChanged" MouseDoubleClick="myListBox_MouseDoubleClick" Panel.ZIndex="2" 
                 BorderThickness="0" FontSize="15" Background="{x:Null}" 
                 HorizontalContentAlignment="Right">           
        </ListBox>
  

Ответ №1:

Вы заменяете ListBoxItem ControlTemplate, и ваш шаблон игнорирует HorizontalContentAlignment свойство:

Исправить:

 <ControlTemplate TargetType="ListBoxItem">
     <Border Name="_Border"
             Padding="2"
             SnapsToDevicePixels="true">
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
     </Border>
  

Ответ №2:

Попробуйте установить свойство style для вашего элемента, иначе созданное вами окно ресурсов установит его для вас.

Сделав это, я смог достичь вашего желания (возможно, это немного сложно) :

  <ListBox x:Name="myListBox" ItemContainerStyle="{DynamicResource _ListBoxItemStyle}" Margin="0,20,0,30" 
             VerticalAlignment="Top" Width="800" HorizontalAlignment="Right"  MinHeight="200" ScrollViewer.HorizontalScrollBarVisibility="Disabled"  
             Panel.ZIndex="2"
             BorderThickness="0" FontSize="15" Background="{x:Null}" 
             HorizontalContentAlignment="Right">
        <ListBoxItem>
            <TextBlock HorizontalAlignment="Right" Text="Test"></TextBlock>
        </ListBoxItem>
</ListBox>