Я создаю приложение 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
Как изменить порядок столбцов в макете WPF Grid? ⇐ C#
Место общения программистов C#
-
Anonymous
1730826304
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, что приведет к проблемам с производительностью и избыточности кода.
>
Подробнее здесь: [url]https://stackoverflow.com/questions/79160058/how-to-reverse-the-order-of-columns-in-wpf-grid-layout[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия