• Какие проекты добавить в портфолио UX/UI дизайнера, если нет опыта?

    Zifix
    @Zifix
    Barbatum
    Прочитайте книгу "Искусство мыть слона", а потом откройте любой каталог приложений, просмотрите самые популярные в интересных вам категориях, и подумайте, что там можно улучшить.
    Ответ написан
    3 комментария
  • Как осуществить переход между страницами в Windows Presentation Foundation?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Microsoft Docs: How to: Navigate to a Page
    Microsoft Docs: NavigationWindow Class
    Хабр: WPF Navigation: Используем связку Page + Frame

    namespace PageNavigation.Services
    {
        public interface INavigationService
        {
            void NavigateToPage1();
    
            void NavigateToPage2();
        }
    }


    using System.Windows.Controls;
    using PageNavigation.Pages;
    
    namespace PageNavigation.Services
    {
        public class NavigationService : INavigationService
        {
            private readonly Frame _frame;
    
            public NavigationService(Frame frame)
            {
                _frame = frame;
            }
    
            public void NavigateToPage1()
            {
                _frame.Navigate(new Page1());
            }
    
            public void NavigateToPage2()
            {
                _frame.Navigate(new Page2());
            }
        }
    }


    Такой Ioc:
    using System.Windows.Controls;
    
    namespace PageNavigation.Services
    {
        public static class Ioc
        {
            public static INavigationService NavigationService { get; private set; }
    
            public static void Init(Frame frame)
            {
                NavigationService = new NavigationService(frame);
            }
        }
    }


    Или такой Ioc:
    https://autofac.org/
    using System.Windows.Controls;
    using Autofac;
    
    namespace PageNavigation.Services
    {
        public static class Ioc
        {
            private static IContainer _container;
    
            public static INavigationService NavigationService
            {
                get { return _container.Resolve<INavigationService>(); }
            }
    
            //public static MainViewModel MainViewModel
            //{
            //    get { return _container.Resolve<MainViewModel>(); }
            //}
    
            public static void Init(Frame frame)
            {
                var builder = new ContainerBuilder();
                
                builder.RegisterType<NavigationService>()
                    .As<INavigationService>()
                    .SingleInstance()
                    .WithParameter(new TypedParameter(typeof(Frame), frame));
    
                //builder.RegisterType<MainViewModel>()
                //    .SingleInstance();
    
                _container = builder.Build();
            }
        }
    }


    Главное окно XAML
    <Window
        x:Class="PageNavigation.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="525"
        Height="350"
        Loaded="OnLoaded"
        WindowStartupLocation="CenterScreen"
        mc:Ignorable="d">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="266*" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
    
            <Frame x:Name="_frame" />
    
            <StackPanel
                Grid.Row="1"
                Margin="8,0,0,6"
                Orientation="Horizontal">
    
                <Button
                    MinWidth="75"
                    MinHeight="29"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    Click="OnNavigateToPage1ButtonClick"
                    Content="Page1" />
    
                <Button
                    MinWidth="75"
                    MinHeight="29"
                    Margin="8,0,0,0"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    Click="OnNavigateToPage2ButtonClick"
                    Content="Page2" />
            </StackPanel>
        </Grid>
    </Window>


    Главное окно C#
    using System.Windows;
    using PageNavigation.Services;
    
    namespace PageNavigation
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void OnLoaded(object sender, RoutedEventArgs e)
            {
                Ioc.Init(_frame);
            }
    
            private void OnNavigateToPage1ButtonClick(object sender, RoutedEventArgs e)
            {
                Ioc.NavigationService.NavigateToPage1();
            }
    
            private void OnNavigateToPage2ButtonClick(object sender, RoutedEventArgs e)
            {
                Ioc.NavigationService.NavigateToPage2();
            }
        }
    }


    Страница 1 XAML
    <Page
        x:Class="PageNavigation.Pages.Page1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="Page1"
        d:DesignHeight="300"
        d:DesignWidth="300"
        mc:Ignorable="d">
    
        <Grid>
    
            <TextBlock Margin="5">
                Это Page 1
            </TextBlock>
    
            <Button
                Padding="12,3,12,3"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Click="OnNavigateToAnotherPageButtonClick"
                Content="Перейти на Page 2" />
        </Grid>
    </Page>


    Страница 1 C#
    using System.Windows.Controls;
    using PageNavigation.Services;
    
    namespace PageNavigation.Pages
    {
        public partial class Page1 : Page
        {
            public Page1()
            {
                InitializeComponent();
            }
    
            private void OnNavigateToAnotherPageButtonClick(object sender, System.Windows.RoutedEventArgs e)
            {
                Ioc.NavigationService.NavigateToPage2();
            }
        }
    }


    Страница 2 XAML
    <Page
        x:Class="PageNavigation.Pages.Page2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="Page2"
        d:DesignHeight="300"
        d:DesignWidth="300"
        mc:Ignorable="d">
    
        <Grid>
    
            <TextBlock Margin="5">
                Это Page 2
            </TextBlock>
    
            <Button
                Padding="12,3,12,3"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Click="OnNavigateToAnotherPageButtonClick"
                Content="Перейти на Page 1" />
        </Grid>
    </Page>


    Страница 2 C#
    using System.Windows;
    using System.Windows.Controls;
    using PageNavigation.Services;
    
    namespace PageNavigation.Pages
    {
        public partial class Page2 : Page
        {
            public Page2()
            {
                InitializeComponent();
            }
    
            private void OnNavigateToAnotherPageButtonClick(object sender, RoutedEventArgs e)
            {
                Ioc.NavigationService.NavigateToPage1();
            }
        }
    }
    Ответ написан
    1 комментарий
  • Как открыть форму по нажатию на строку в DataGrid?

    SpacePurr
    @SpacePurr
    c#, wpf
    • Создаем колонку, содержимое в ячейках которой будет представлять Button с событием Button_Click.
      <DataGrid Name="MyDataGrid" ItemsSource="{Binding Table}">
          <DataGrid.Columns>
              <DataGridTemplateColumn>
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <Button Click="Button_Click">Open Form</Button>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
          </DataGrid.Columns>
      </DataGrid>

    • Пусть имеется некая форма TosterForm, конструктор которой принимает один строковый аргумент - значение в 3 колонке выделенной строки.
      private void Button_Click(object sender, RoutedEventArgs e)
      {
          TosterForm form = new TosterForm(((DataRowView)MyDataGrid.SelectedItem).Row.ItemArray[3].ToString());
          form.ShowDialog();
      }

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


    Собственно, вроде все.
    5dc1d8876549f349153436.gif
    Ответ написан
    Комментировать
  • Как в WPF фильтровать двойной клик по ListView только левой кнопкой?

    FoggyFinder
    @FoggyFinder
    Можно пойти разными способами:

    1. Использовать InputBinding, а именно MouseBinding. Тут LeftDoubleClick один из вариантов отслеживаемых действий, посмотреть весь список можно тут

    2. Использовать CallMethodAction вместо InvokeCommandAction, тогда вы сможете учитывать аргументы события.
    Сигнатура метода должна быть точно такая же как если бы вы обрабатывали событие в View части.

    3. Поискать реализацию (или написать самостоятельно) EventToCommand где будет метод PassEventArgsToCommand (с корректной реализацией)
    Ответ написан
    2 комментария
  • Причем тут преобразование типа?

    @Nujabes37
    :DEATH
    (DataRowView)dGMaterials.SelectedItem;
    !!!
    https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...
    Ответ написан
    Комментировать
  • Можно получить конструктивную критику по первому дизайну?

    Zoominger
    @Zoominger
    System Integrator
    О, мой просмотр был первым.
    "Биоревитализация", Карл!
    Всё такое розовато-кремовое, много полуодетых шкур и обилие слишком энциклопедических фраз.
    Кстати, у вас написано: "9800 довольных клиентов" и при этом: "Сотни довольных каждый день". То есть, получается, что данная контора работает от силы месяца два.

    Ну а так норм, только вот этот кремовый фон прямо превращает меня в ТП.
    Ответ написан
    1 комментарий
  • Как сделать бэкенд на C# с нуля?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Изучить сетевой стек — сетевая модель OSI. Не обязательно глубоко — но базовые вещи вроде уровней, протоколов надо знать.
    2. Изучить что такое сокеты и как они работают:
      1. реализовать чтение данных из сокета
      2. запись данных в сокет
      3. затем реализовать сокет-сервер и сокет клиент
      4. организовать передачу данных между ними
      5. сделать прием/передачу данных из/в сокета/сокет блокирующую и неблокирующую и понять разницу между ними
      6. реализовать на сервере поддержку коннекта нескольких клиентов
      7. реализовать группу потоков и очереди для чтения/записи в сокеты

    3. Изучить веб-сокеты
    4. Выбрать любую БД, подходящую под ваши критерии (схема данных, нагрузка, логика работы приложения и т.п.) — можно взять любую популярную MySQL, PosgreSQL, Mongo и т.п.
    5. Найти библиотеку для работы БД и пройти туториалы по ней
    6. Подключить библиотеку для работы с БД к сокет/веб-сокет серверу
    7. Реализовать сетевое API вашего сервера (логин клиентом, прием/передача данных и прочее)
    8. Реализовать клиентскую обертку для работы с API сервера
    Ответ написан
    2 комментария
  • Где взять скрины карты для дизайна?

    Kritix
    @Kritix
    Вот от Google пару вариантов:
    https://mapstyle.withgoogle.com/

    А вот от Snazzy Maps, здесь много вариантов:
    https://snazzymaps.com/explore
    Ответ написан
    Комментировать
  • Где найти литературу или статьи по разработке интерфейсов для оконных приложений в Windows?

    Zifix
    @Zifix
    Barbatum
    Практика, практика и практика.

    Плюс полезные книжки типа "Искусство мыть слона" и "Психбольница в руках пациентов". Ничего специфического в Windows или WPF нет, везде одни и те же проблемы и похожие решения.
    Ответ написан
    Комментировать