2011-09-14 12 views
8

Voglio creare un ListBoxItem con un layout che include due aree, una "float: left" e una "float: right", con l'elemento che occupa l'intera larghezza allocata al ListBox e la ListBox che riempie il suo contenitore (es. espandendo per riempire lo spazio disponibile).Come posso replicare "float: right" in XAML?

Come posso ottenere questo risultato in XAML?

grazie

+1

È possibile utilizzare un componente tabella o griglia per quella, impostare una o entrambe le colonne di auto -dimensione. –

risposta

8

Per il "elemento complessiva riempire l'intera larghezza assegnato al ListBox" è necessario uno stile come questo:

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

e facoltativamente disabilitare lo scorrimento orizzontale per la casella di riepilogo:

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

per il pannello radice del DataTemplate è possibile utilizzare un dockpanel:

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

o una griglia:

<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

Grazie per questo, mi hai fatto andare a realizzare quello che stavo cercando. – MalcomTucker

0

Utilizzare un Grid per posizionare o elementi dock per varie parti del modulo/pannello.

+0

è possibile utilizzare una griglia in un modello di elemento listbox? – MalcomTucker

+0

La bellezza di XAML è che puoi usare praticamente qualsiasi cosa all'interno di qualsiasi altra cosa. Se devi fare quella domanda, la risposta (circa il 99% delle volte) sarà sempre un risonante ** SÌ **. – qJake

+0

Ok, grazie. Sono nuovo di XAML: se hai un momento potresti fornire un esempio di codice? Solo uno scheletro sarebbe fantastico! Grazie – MalcomTucker

1

questo è il modo lo farei:

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