WPF пограничный контроль, чтобы охватить ширину listboxItem

StackOverflow https://stackoverflow.com/questions/460812

  •  19-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь определить dataTemplate для бизнес-объекта в моем приложении wpf, коллекция которого привязана к ListBox.

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

Как я могу получить границу, определенную с помощью x: Name = bdr, чтобы охватить всю ширину каждого элемента списка? На данный момент он охватывает только текстовые блоки внутри него, которые не обязательно заполняют всю ширину элемента списка, а также различаются для каждого элемента списка.

Это было полезно?

Решение

Это, вероятно, больше связано с тем, что сами ListBoxItems не занимают всю ширину ListBox. Добавьте атрибут HorizontalContentAlignment="Stretch" к своему ListBox и посмотрите, растягивает ли он отдельные элементы, чтобы заполнить их по ширине.

Другие советы

Разобрался. Хитрость заключается в том, чтобы установить HorizontalContentAlignment = & Quot; Stretch & Quot; в вашем списке, чтобы его содержимое растягивалось на всю ширину, а не только на содержимое.

 <ListBox x:Name="ListBoxResizeItems" 
                HorizontalContentAlignment="Stretch"
                ItemsSource="{Binding Path=ResizeItems}" 
                BorderThickness="0"                                         
                ItemTemplate="{DynamicResource ResizedItemsDataTemplate}" >
        </ListBox>

Извините, Мэтт, только что получил ваш ответ, когда я печатал этот пост.

HorizontalContentAlignment - это хорошее, чистое решение по сравнению с тем, что я пробовал. Спасибо!

Вот что ПОЧТИ работало, но иногда заставляло диалоговое окно анимироваться все шире и шире навсегда:

Width="{Binding ActualWidth, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top