2009-01-20 8 views
17

Ich versuche, eine DataTemplate für ein Business-Objekt in meiner WPF-Anwendung eine Sammlung von denen an eine ListBox gebunden ist.wpf Rahmenkontrolle über die Breite von ListboxItem

<UserControl.Resources> 
    <DataTemplate x:Key="ResizedItemsDataTemplate" DataType="{x:Type resizer:ResizeMonitorItem}"> 
       <Border x:Name="bdr" BorderBrush="Blue" 
            BorderThickness="1" 
            CornerRadius="2" 
            Width="auto" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"> 
        <Grid Margin="2"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="14"></RowDefinition> 
          <RowDefinition Height="14"></RowDefinition> 
         </Grid.RowDefinitions> 


         <TextBlock Grid.Row="0" Text="{Binding SaveAsFileName}"></TextBlock> 
         <TextBlock Grid.Row="1" Text="{Binding ResizedImageFilePath}"></TextBlock> 
        </Grid> 
      </Border> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0">  
    <Border BorderThickness="0,0,0,5" BorderBrush="DarkGray" > 
     <ListBox x:Name="ListBoxResizeItems" ItemsSource="{Binding Path=ResizeItems}" BorderThickness="0" ItemTemplate="{DynamicResource ResizedItemsDataTemplate}"> 
     </ListBox> 
    </Border> 
</Grid> 

Wie kann ich die Grenze definiert mit x erhalten: Name = BDR die volle Breite jedes Listbox-Element zu überbrücken? Im Moment überspannt es nur die With der Textblöcke, die nicht unbedingt die volle Breite des Listboxitems ausfüllen müssen und auch für jedes Listboxitem unterschiedlich sind.

Antwort

52

Dies hat wahrscheinlich mehr damit zu tun, dass die ListBoxItems selbst nicht die volle Breite der ListBox einnehmen. Fügen Sie das HorizontalContentAlignment="Stretch" Attribut Ihrer ListBox hinzu und sehen Sie, ob es die einzelnen Elemente streckt, um die Breite zu füllen.

+0

Nizza. Wusste nicht über diese Eigenschaft. Schade, der Standardwert ist Left anstelle von Stretch, was zu diesem Verhalten führt. – Gishu

+0

Super, ich hatte genau das gleiche Problem und das hat es gelöst. – vargonian

+0

Disco, wussten über diese Eigenschaft, aber immer noch neu in WPF und das hat genau das, was ich wollte. Vielen Dank! –

1

Arbeitete es aus. Der Trick besteht darin, den Wert für HorizontalContentAlignment = "Stretch" in Ihrer Listbox so festzulegen, dass der Inhalt die gesamte Breite ausdehnt und nicht nur auf den Inhalt passt.

Sorry Matt, habe gerade deine Antwort erhalten, als ich diesen Beitrag eintippte.

1

HorizontalContentAlignment ist eine schöne, saubere Lösung im Vergleich zu dem, was ich versuchte. Vielen Dank!

Hier ist, was NAHEZU gearbeitet, aber manchmal ein Dialogfeld machte sich animiert breiter und breiter für immer:

Width="{Binding ActualWidth, 
     RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}" 
+0

Warum eine Antwort schreiben, die * fast * funktioniert, wenn es eine vollkommen gute Lösung gibt, die funktioniert? Vor allem 10 Monate nachdem die Frage beantwortet wurde ... (Randnotiz: Ich habe genau den gleichen Ansatz wie vor einem Moment gemacht .. :) –