#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) занимают то же пространство, которого я должен избегать.
Любые изменения, рекомендуемые для удаления единой сетки в приведенном выше фрагменте кода, и добавления обычной сетки для достижения ожидаемой функциональности.