Несколько сплиттеров в окне WPF

У меня есть окно wpf, в котором есть несколько групповых блоков, которые добавляются в зависимости от требований пользователя. Я хочу развернуть любое поле группы, чтобы увидеть все его содержимое. Прикрепленное изображение представляет макет.

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

Я попытался использовать Grid Splitter, но он разбивает сетку на две части, где я хочу разбить его на динамические числа (в зависимости от количества групповых блоков). Как я могу разработать макет, который может поддерживать эту функцию.

Я попытался добавить несколько элементов управления Glit Split в свои отдельные столбцы, но затем они расширяют свои собственные столбцы, поглощая пространства групповых блоков, что является чем-то ненужным.

1 ответ

Что я хотел бы сделать, это то, что я создам интерфейс, который ваш текущий TrackViewModel затем создать ViewModel для этого GridSplitter и пусть оба класса реализуют ITrackItem

public class GridSplitterViewModel : ITrackItem
{
  // Code omitted...
}

public class TrackViewModel : ITrackItem
{
  // Code omitted...
}

public interface ITrackItem
{
  // Whatever properties that you may need.
  public Type ItemType { get; }
}

public class MainViewModel
{
   public MainViewModel()
   {
     // Made it simple but the idea is here..
     Tracks = new ObservableCollection<ITrackItem>(GetSomethingFromTheDatabaseMaybe());
     Tracks.Insert(1, new GridSplitterViewModel());
     Tracks.Insert(3, new GridSplitterViewModel());
   }

  // Rest of code omitted
}

И по вашему XAML вам придется определить DataTriggers для тебя Items, Идея в том, что ViewModel все еще кормит UI на что показать и тому UI будет обрабатывать изменения шаблона на основе triggers,

<DataTrigger Binding="{ItemType}" Value="{x:Type GridSplitterViewModel}">
  <Setter Property="Template">
    <Setter.Value>
        <DataTemplate>
            <GridSplitter/>
        </DataTemplate>
     </Setter.Value>
  </Setter>
 </DataTrigger>
<DataTrigger Binding="{ItemType}" Value="{x:Type TrackViewModel}">
  <Setter Property="Template">
    <Setter.Value>
        <DataTemplate>
            <GroupBox Header="{Binding TrackName}" Width="400" 
               Height="{Binding ElementName=TabCharts,  Path= ActualHeight, Converter={StaticResource HeightConverter}}"  Margin="0 0 20 0">
                                                            <chart:CustomCharts></chart:CustomCharts>
            </GroupBox>
        </DataTemplate>
     </Setter.Value>
  </Setter>
</DataTrigger>
Другие вопросы по тегам