Как изменить порядок столбцов в макете WPF Grid?C#

Место общения программистов C#
Ответить
Anonymous
 Как изменить порядок столбцов в макете WPF Grid?

Сообщение Anonymous »

Я создаю приложение WPF на C#.
Я пытаюсь реализовать макет из двух столбцов с использованием макета Grid, аналогичного боковой панели браузера.
Grid реализован как макет из трех столбцов, поскольку я использую GridSplitter, чтобы легко изменить ширину боковой панели.
Боковую панель можно свернуть, поэтому Стиль настроен со ссылкой на следующее, чтобы его можно было без проблем свернуть после использования GridSplitter.

WPF: свернуть GridSplitter?
По по умолчанию боковая панель располагается справа, но я хотел бы динамически изменить порядок в коде.
MainContent | GridSplitter | Sidebar

Sidebar | GridSplitter | MainContent
MainWindow.xaml


























































MainWindow.xaml.cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;

namespace WpfApp1
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
private bool _showSidebar = true;
public bool ShowSidebar
{
get => _showSidebar;
set => SetField(ref _showSidebar, value);
}

public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}

private void ToggleSidebarButton_OnClick(object sender, RoutedEventArgs e)
{
ShowSidebar = !ShowSidebar;
}

private void SwapSidebarButton_OnClick(object sender, RoutedEventArgs e)
{
// TODO: How to swap the sidebar programmatically?
throw new NotImplementedException();
}

#region IPC
public event PropertyChangedEventHandler? PropertyChanged;

protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

protected bool SetField(ref T field, T value, [CallerMemberName] string? propertyName = null)
{
if (EqualityComparer.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
#endregion

}
}

Часть TODO написана с использованием кода программной части, но на самом деле мне бы хотелось реализовать ее в ViewModel с помощью MVVM.
Я это подтвердил это можно реализовать, используя макет из 5 столбцов, как показано ниже, реализованный путем создания двух переменных ShowSidebarRight и ShowSidebarLeft, размещения двух SidebarView и GridSplitter каждый и управления отображением с помощью Visibility.
но я хотел бы реализовать его только с одним экземпляром View, поскольку это создаст дополнительный экземпляр SidebarView и ViewModel, что приведет к проблемам с производительностью и избыточности кода.
>















































Подробнее здесь: https://stackoverflow.com/questions/791 ... rid-layout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»