Размер элемента списка должен быть установлен на основе содержимого

#c# #wpf #windows #xaml #wpf-controls

Вопрос:

У меня есть сетка внутри элементов списка, в которой мне нужно уменьшить размер ячейки в зависимости от содержимого.

В настоящее время он принимает первый размер ячейки для остальных ячеек, так как он настроен на равномерную сетку, так что требуется каждый раз нажимать на полосу прокрутки.

Код —

  private ListBox SetCellElement(DataGridCell cell, object dataItem)
 {
        int currentRowIndex = cell.GetRowIndex();
        LabContainer currentLabContainer = dataItem as LabContainer;
        IEnumerable<LabContainer> allContainers = GetLabContainers();
        cell.Style = Application.Current.Resources["ReadingBasedCellStyle"] as Style;
        ListBox listBox = new ListBox() { BorderThickness = new Thickness(0), Name = "ListBox" };
        listBox.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
        listBox.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
        
        listBox.ItemContainerStyle = Application.Current.Resources["HorizantalListBoxItemsPanel"] as Style;
        listBox.DataContext = dataItem;
        var wrapPanelFactory = new FrameworkElementFactory(typeof(System.Windows.Controls.Primitives.UniformGrid));
        wrapPanelFactory.SetValue(System.Windows.Controls.Primitives.UniformGrid.RowsProperty, 1);
        listBox.ItemTemplateSelector = new ReadingDataTemplateSelector();

        listBox.ItemsPanel = new ItemsPanelTemplate(wrapPanelFactory);  
        ...
        ...
        ...
  }
 

Список.xaml

  <Style x:Key="HorizantalListBoxItemsPanel" TargetType="ListBoxItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <StackPanel Orientation="Horizontal">
                    <Border Width="1" BorderBrush="{Binding Path=VerticalGridLinesBrush, RelativeSource={RelativeSource AncestorType=DataGrid, Mode=FindAncestor}}" 
                        BorderThickness="0.5" x:Name="Separator"/>
                    <ContentPresenter Margin="2,0"/>
                </StackPanel>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
                        <Setter Property="Visibility" TargetName="Separator" Value="Collapsed"/>
                    </DataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
 

введите описание изображения здесь

Пожалуйста, нажмите на ссылку выше для изображения.

На приведенном выше изображении столбцы шага 3 имеют минимальные значения, так как с самого начала нет содержимого. Однако на шаге 4 — Поскольку в первой ячейке есть значение (1 мл при 0 БрРГ :1/5), остальные ячейки(2,3,4,5) занимают то же пространство, которого я должен избегать.

Любые изменения, рекомендуемые для удаления единой сетки в приведенном выше фрагменте кода, и добавления обычной сетки для достижения ожидаемой функциональности.