2011-09-14 10 views
8

Chcę utworzyć obiekt ListBoxItem z układem, który zawiera dwa obszary, jeden "float: left" i jeden "float: right", przy czym element ogólnie wypełnia całą szerokość przydzieloną do ListBox i ListBox wypełniający jego kontener (np. rozszerzanie w celu wypełnienia dostępnej przestrzeni).Jak mogę replikować "float: right" w XAML?

Jak mogę to osiągnąć w XAML?

dzięki

+1

Można użyć komponentu tabeli lub siatki za to, ustaw jedną lub obie kolumny do auto -rozmiar. –

Odpowiedz

8

Dla „pozycja ogólna wypełniając całą szerokość przydzieloną ListBox” trzeba styl takiego:

<Style TargetType="ListBoxItem"> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
</Style> 

i ewentualnie wyłączyć przewijanie w poziomie dla pola listy:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" .. > 

w przypadku panelu głównego DataTemplate można użyć panelu dokowanego:

<DockPanel> 
    <SomeControlLeft DockPanel.Dock="Left" Margin="0 0 5 0" /> 
    <SomeControlRight DockPanel.Dock="Right" Margin="5 0 0 0" /> 
    <SomeControlFill /> 
</DockPanel> 

lub siatka:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" /> 
    <ColumnDefinition Width="5" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="5" /> 
    <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <SomeControlLeft Grid.Column="0" /> 
    <SomeControlRight Grid.Column="4" /> 
    <SomeControlFill Grid.Column="2" /> 
</Grid> 
+0

Dzięki za to, dostałeś mnie na mojej drodze do osiągnięcia tego, czego szukałem. – MalcomTucker

0

Użyj Grid do położenia albo elementy stację do różnych części formy/panelu.

+0

Czy można użyć siatki w szablonie elementu listy? – MalcomTucker

+0

Piękno XAML polega na tym, że możesz użyć prawie wszystkiego, co znajduje się w prawie każdym innym miejscu. Jeśli musisz zadać to pytanie, odpowiedź (w 99% przypadków) zawsze będzie brzmiała tak: ** TAK **. – qJake

+0

Ok dzięki. Jestem nowy w XAML - jeśli masz chwilę, możesz podać próbkę kodu? Tylko szkielet byłby świetny! Dzięki – MalcomTucker

1

To jest sposób by to zrobić:

<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <Grid Background="Red"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 

         <TextBlock Text="{TemplateBinding Content}"/> 
         <TextBlock Text="{TemplateBinding Tag}" Grid.Column="1"/> 

        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White"> 

    <ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}"> 
     <ListBoxItem Content="Lorem" Tag="Ipsum"/> 
     <ListBoxItem Content="Hello" Tag="World"/> 
     <ListBoxItem Content="Be" Tag="Happy"/> 
    </ListBox> 

</Grid> 
Powiązane problemy