2011-09-14 60 views
8

我想要創建一個包含兩個區域,一個'float:left'和一個'float:right'的佈局的ListBoxItem,其中整個項目填充分配給ListBox和填充其容器的ListBox的整個寬度(即擴大以填補可用空間)。如何在XAML中複製'float:right'?

如何在XAML中實現這一點?

感謝

+1

您可以使用一個表或網格組件,設置一個或兩列,將自動-尺寸。 –

回答

8

對於「項目整體填充分配到ListBox整個寬度」,你需要這樣的風格:

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

和可選的列表框禁用水平滾動:

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

對於DataTemplate的根面板,您可以使用一個DockPanel:

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

或網格:

<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

感謝你的這一點,你讓我的方式來實現我在找的東西。 – MalcomTucker

0

使用Grid定位或碼頭元件到窗體/面板的各個部分。

+0

你可以在列表框項目模板中使用網格嗎? – MalcomTucker

+0

XAML的美妙之處在於,你幾乎可以使用其他任何東西中的任何東西。如果你不得不問這個問題,答案(大約99%的時間)總是會是一個響亮的** YES **。 – qJake

+0

好的,謝謝。我是XAML新手 - 如果您有時間可以提供代碼示例?只是一個骨架將是偉大的!謝謝 – MalcomTucker

1

這是我會做的方式:

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