Avalonia или wpf c autocad net api

Автор Тема: Avalonia или wpf c autocad net api  (Прочитано 12779 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Avalonia или wpf c autocad net api
« Ответ #15 : 29-10-2020, 17:03:50 »
Просто надстройка над WPF уменьшающая количество кода.
Она не может быть надстройкой над WPF, потому что работает там, где WPF недоступен.
Цитировать
Если вы знакомы с WPF или UWP, то с Avalonia вы должны чувствовать себя как дома. Хотя Avalonia не совместим по API ни с одной из этих сред (и поэтому элементы управления не могут использоваться без портирования), между ними много общего.
Перевод с помощью гугл-переводчика, оригинал тут: https://avaloniaui.net/docs

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Avalonia или wpf c autocad net api
« Ответ #16 : 29-10-2020, 17:14:51 »
говорят что "Авалония - это сильно улучшенный впф. Так что юзать сильно приятнее и таких проблем нет с биндингом"
А какие проблемы в WPF с биндингом?

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #17 : 29-10-2020, 17:32:35 »
Lemieux, спасибо получилось, вот хорошо что есть такие форумы, а то одному тяжело разбираться, столько времени потратил, со вчерашнего для сидел, подскажите а как стиль подключить autocad ругается на
Style="{StaticResource VS2012WindowStyle}"
Что пишет? Ты откуда-то из примера взял эту строчку?

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Avalonia или wpf c autocad net api
« Ответ #18 : 30-10-2020, 06:40:53 »
А какие проблемы в WPF с биндингом?
да замучился с биндингом модели, просто список получалось, а вот оказывается модель надо программно в itemsource записывать, а в xaml  файле прописывать свойства этой модели не смотря на то что Intelisense не подсказывает и выводит эти волнистые линии.

Что пишет? Ты откуда-то из примера взял эту строчку?
не в этом примере, у меня в другом файле есть внешний стиль, ругается так

Извините, вам запрещён просмотр содержимого спойлеров.

может как то его прописывать надо по другому, возможно ли что он в библиотеку не собирается он находится в папке Styles\VS2012 и в xaml прописано xmlns:local="clr-namespace:TransmittalCreator.Styles.VS2012"
« Последнее редактирование: 30-10-2020, 07:11:06 от Yusuf »

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #19 : 30-10-2020, 07:57:11 »
а вот оказывается модель надо программно в itemsource записывать
Не обязательно так делать. Посмотри примеры с DataContext, а так же примеры с базами данных, как там работают с DataContext и кастомным классом Node.



не в этом примере, у меня в другом файле есть внешний стиль, ругается так
Есть подозрение, что ошибка того же рода
https://adn-cis.org/forum/index.php?topic=9820.0

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Avalonia или wpf c autocad net api
« Ответ #20 : 30-10-2020, 08:51:58 »
говорят что "Авалония - это сильно улучшенный впф.
Цитировать
Мне его порекомендовали в группе шарпистов, после того как я спросил как забиндить TextBlock который находится в combobox...
Я бы сказал, что это просто более новый wpf, но еще сырой (DataGrid например). Да там сделали нормальный биндинг команд - просто биндится метод (с моей точки зрения в wpf с этим ICommand перемудрили) и поддержку асинхронности "из коробки". Для автокада я бы его точно сейчас использовать не стал (на основании чего Вам рекомендовали его "шарписты" и в чем проблема биндинга textblock с combobox - это для меня очень странные вопросы). Мое мнение - на сегодня его имеет смысл использовать если только необходимо реализовать GUI в .NetCore. В других случаях я бы сильно посоветовал подождать, с выходом обобщенного .Net (5 или постарше) MS в любом случае придеться выдать реализацию GUI - я не думаю, что это будет релиз WPF (он сильно завязан под нативный Windows, не так конечно как WinForms, но все-же - да и WinForms сильно проще его-как раз можно просто и переписать - но не нужно). Скорее всего "явят", что-то новое с заточкой на все последние "плюшки" C#. Вот тут я допускаю вариант, что это будет выкупленная Avalonia (как поступили с Xamarin например) либо-же, что-то новое.
Переписывать под Core WPF смысла нет. Часть концепций уже устаревает - а вкладывать огромные ресурсы в получение того-же, да еще и с репутационными рисками (100% найдется, то что будет работать не так как в оригинале - сразу "недалекие" доброжелатели начнут комментировать - что даже переписать свое старое не можете). Вот тогда и можно смотреть, что изучать - а сейчас, я бы рекомендовал разобраться с WPF и не хватать то, что блестит - голова не резиновая, хвататься за все новые "фишки" - непозволительная роскошь - если только совсем от безделья.
Разработать полноценный GUI - это "дорогое" удовольствие, да в Avalon'ии есть принципиальные "штрихи", которые почти наверняка будут в следующей реализации выпущенной, или рекомендуемой к юзанию GUI от MS (там используется те технологии которые последовательно внедряют в мейнстрим) - подход данный кстати очень продуманный (эволюционный - за последние 10 лет С# превратили в F# только с Си подобным синтаксисом и плавно "повыкидывали" все лишнее - нет все осталось, но так уже никто не пишет).
В общем не торопитесь.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #21 : 30-10-2020, 09:10:04 »
Кстати. Кастомный стиль окна я делаю по другому. Я сделал безрамочное WPF окно, настроил его так, чтобы повторяло окно из AutoCAD и можно было его перемещать, а туда вставляю UserControl.

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Avalonia или wpf c autocad net api
« Ответ #22 : 30-10-2020, 09:14:57 »
Вот тогда и можно смотреть, что изучать - а сейчас, я бы рекомендовал разобраться с WPF и не хватать то, что блестит - голова не резиновая, хвататься за все новые "фишки" - непозволительная роскошь - если только совсем от безделья.
вот поэтому решил тут спросить, спасибо за подробный ответ.

Кстати. Кастомный стиль окна я делаю по другому. Я сделал безрамочное WPF окно, настроил его так, чтобы повторяло окно из AutoCAD и можно было его перемещать, а туда вставляю UserControl.
можно поподробней как сделать чтобы повторяло стиль окна autocad

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #23 : 30-10-2020, 09:16:39 »
можно поподробней как сделать чтобы повторяло стиль окна autocad
Буду дома, скину пример.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Avalonia или wpf c autocad net api
« Ответ #24 : 30-10-2020, 10:35:24 »
Она не может быть надстройкой над WPF, потому что работает там, где WPF недоступен.
Возможно написали с нуля, используя подход WPF и устраняя узкие места.

Так с многими API, языками, софтом происходит. Когда начинают ими пользоваться находится куча "узких мест". Решается либо plugins, либо пишут свой API, работающий поверх существующего, либо переписывают с нуля.

Узкие места, это обычно:
1. Низкая производительность в каких-то сценариях
2. Недостаточность функционала
3. Избыточность кода для типовых сценариев.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #25 : 30-10-2020, 17:40:15 »
можно поподробней как сделать чтобы повторяло стиль окна autocad

Код - XML [Выбрать]
  1. <Window x:Class="PowerSystemProtection.Windows.Palette_Set"
  2.        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.        xmlns:local="clr-namespace:PowerSystemProtection.Windows"
  7.        mc:Ignorable="d"
  8.        Height="Auto"
  9.        Width="Auto"
  10.        WindowStyle="None"
  11.        PreviewKeyDown="HandleEsc"
  12.        AllowsTransparency="True"
  13.        ShowInTaskbar="False"
  14.        Background="Transparent"
  15.        BorderBrush="Transparent"
  16.        Foreground="Transparent"
  17.        ResizeMode="NoResize"
  18.        FontFamily="GOST Type B"
  19.        FontSize="14"
  20.        SizeToContent="WidthAndHeight">
  21.     <Grid Background="#00000000">
  22.         <Grid.ColumnDefinitions>
  23.             <ColumnDefinition Width="3" />
  24.             <ColumnDefinition Width="3" />
  25.             <ColumnDefinition Width="Auto" />
  26.             <ColumnDefinition Width="3" />
  27.             <ColumnDefinition Width="21" />
  28.         </Grid.ColumnDefinitions>
  29.         <Grid.RowDefinitions>
  30.             <RowDefinition Height="3" />
  31.             <RowDefinition Height="3" />
  32.             <RowDefinition Height="Auto" />
  33.             <RowDefinition Height="3" />
  34.             <RowDefinition Height="3" />
  35.         </Grid.RowDefinitions>
  36.         <Rectangle Grid.Column="0"
  37.                   Grid.ColumnSpan="5"
  38.                   Grid.Row="0"
  39.                   Grid.RowSpan="5"
  40.                   Fill="#FF2E3440"
  41.                   Stroke="#FF222933"
  42.                   RadiusX="3"
  43.                   RadiusY="3"
  44.                   MouseDown="DragAndMove"/>
  45.         <Rectangle Grid.Column="1"
  46.                   Grid.ColumnSpan="3"
  47.                   Grid.Row="1"
  48.                   Grid.RowSpan="3"
  49.                   Fill="#FF2E3440"
  50.                   Stroke="#FF222933"
  51.                   RadiusX="3"
  52.                   RadiusY="3"/>
  53.         <DockPanel Grid.Column="4"
  54.                   Grid.Row="0"
  55.                   Grid.RowSpan="5"
  56.                   MouseDown="DragAndMove"
  57.                   Background="#00000000">
  58.             <Button x:Name="close_button"
  59.                    HorizontalAlignment="Center"
  60.                    VerticalAlignment="Top"
  61.                    DockPanel.Dock="Top"
  62.                    Background="Transparent"
  63.                    BorderBrush="Transparent"
  64.                    Foreground="Transparent"
  65.                    Width="12"
  66.                    Height="12"
  67.                    RenderTransformOrigin="0.5,0.5"
  68.                    Click="CloseWindow"
  69.                    Margin="0,7,0,0">
  70.                 <Button.Style>
  71.                     <Style TargetType="{x:Type Button}">
  72.                         <Setter Property="Template">
  73.                             <Setter.Value>
  74.                                 <ControlTemplate TargetType="{x:Type Button}">
  75.                                     <Grid Background="{TemplateBinding Background}">
  76.                                         <ContentPresenter HorizontalAlignment="Center"
  77.                                                          VerticalAlignment="Center" />
  78.                                     </Grid>
  79.                                 </ControlTemplate>
  80.                             </Setter.Value>
  81.                         </Setter>
  82.                     </Style>
  83.                 </Button.Style>
  84.                 <Button.RenderTransform>
  85.                     <TransformGroup>
  86.                         <RotateTransform Angle="45" />
  87.                     </TransformGroup>
  88.                 </Button.RenderTransform>
  89.                 <Canvas HorizontalAlignment="Center"
  90.                        VerticalAlignment="Center"
  91.                        Width="12"
  92.                        Height="12">
  93.                     <Grid>
  94.                         <Grid.ColumnDefinitions>
  95.                             <ColumnDefinition Width="1" />
  96.                             <ColumnDefinition Width="1" />
  97.                             <ColumnDefinition Width="1" />
  98.                             <ColumnDefinition Width="1" />
  99.                             <ColumnDefinition Width="1" />
  100.                             <ColumnDefinition Width="1" />
  101.                             <ColumnDefinition Width="1" />
  102.                             <ColumnDefinition Width="1" />
  103.                             <ColumnDefinition Width="1" />
  104.                             <ColumnDefinition Width="1" />
  105.                             <ColumnDefinition Width="1" />
  106.                             <ColumnDefinition Width="1" />
  107.                         </Grid.ColumnDefinitions>
  108.                         <Grid.RowDefinitions>
  109.                             <RowDefinition Height="1" />
  110.                             <RowDefinition Height="1" />
  111.                             <RowDefinition Height="1" />
  112.                             <RowDefinition Height="1" />
  113.                             <RowDefinition Height="1" />
  114.                             <RowDefinition Height="1" />
  115.                             <RowDefinition Height="1" />
  116.                             <RowDefinition Height="1" />
  117.                             <RowDefinition Height="1" />
  118.                             <RowDefinition Height="1" />
  119.                             <RowDefinition Height="1" />
  120.                             <RowDefinition Height="1" />
  121.                         </Grid.RowDefinitions>
  122.                         <Rectangle Grid.Column="0"
  123.                                   Grid.ColumnSpan="12"
  124.                                   Grid.Row="5"
  125.                                   Grid.RowSpan="2"
  126.                                   Fill="#bec0c5"
  127.                                   RadiusX="1"
  128.                                   RadiusY="1" />
  129.                         <Rectangle Grid.Column="5"
  130.                                   Grid.ColumnSpan="2"
  131.                                   Grid.Row="0"
  132.                                   Grid.RowSpan="12"
  133.                                   Fill="#bec0c5"
  134.                                   RadiusX="1"
  135.                                   RadiusY="1" />
  136.                     </Grid>
  137.                 </Canvas>
  138.             </Button>
  139.             <Image VerticalAlignment="Bottom"
  140.                   x:Name="image"
  141.                   Margin="0,0,1,2"
  142.                   DockPanel.Dock="Bottom"
  143.                   Width="16"
  144.                   Height="16"/>
  145.             <TextBlock x:Name="text_block"
  146.                       DockPanel.Dock="Bottom"
  147.                       VerticalAlignment="Bottom"
  148.                       RenderTransformOrigin="0.5,0.5"
  149.                       HorizontalAlignment="Center"
  150.                       Foreground="#bec0c5"
  151.                       Margin="2,0,0,10"
  152.                       TextOptions.TextFormattingMode="Display"
  153.                       FontFamily="Segoe UI">
  154.                 <TextBlock.LayoutTransform>
  155.                     <RotateTransform Angle="270" />
  156.                 </TextBlock.LayoutTransform>
  157.             </TextBlock>
  158.         </DockPanel>
  159.         <Grid Grid.Column="2"
  160.              Grid.ColumnSpan="1"
  161.              Grid.Row="2"
  162.              Grid.RowSpan="1"
  163.              x:Name="host_grid"
  164.              Background="White">
  165.         </Grid>
  166.     </Grid>
  167. </Window>

Код - C# [Выбрать]
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Input;
  4. using System.Windows.Media.Imaging;
  5. using App = Autodesk.AutoCAD.ApplicationServices.Core.Application;
  6.  
  7. namespace PowerSystemProtection.Windows
  8. {
  9.     public partial class Palette_Set : Window
  10.     {
  11.         public string IconSource { get; set; } = "";
  12.         public string TitlePalette { get; set; } = "";
  13.         public bool IsEnableCloseButton { get; set; } = true;
  14.         public bool ModalWindow { get; set; } = true;
  15.         public bool IsActivated { get; set; } = true;
  16.  
  17.         public Palette_Set(UIElement userControl)
  18.         {
  19.             InitializeComponent();
  20.             host_grid.Children.Add(userControl);
  21.         }
  22.  
  23.         public void ShowPalette()
  24.         {
  25.             if (IconSource == "")
  26.                 image.Visibility = Visibility.Collapsed;
  27.             else
  28.                 image.Source = new BitmapImage(new Uri(IconSource, UriKind.Relative));
  29.  
  30.             if (TitlePalette == "")
  31.                 text_block.Visibility = Visibility.Collapsed;
  32.             else
  33.                 text_block.Text = TitlePalette;
  34.  
  35.             close_button.Visibility = IsEnableCloseButton ? Visibility.Visible : Visibility.Hidden;
  36.  
  37.             if (ModalWindow)
  38.                 App.ShowModalWindow(this);
  39.             else
  40.                 App.ShowModelessWindow(this);
  41.  
  42.             ShowActivated = IsActivated;
  43.         }
  44.  
  45.         private void CloseWindow(object sender, RoutedEventArgs e)
  46.         {
  47.             Close();
  48.         }
  49.  
  50.         private void DragAndMove(object sender, MouseButtonEventArgs e)
  51.         {
  52.             DragMove();
  53.         }
  54.  
  55.         private void HandleEsc(object sender, KeyEventArgs e)
  56.         {
  57.             if (e.Key == Key.Escape)
  58.                 Close();
  59.         }
  60.     }
  61. }

Это шаблон для окна, на 100% не повторяет окно палитры, нет кнопки свёртывания и параметров. У него автоизменение ширины/высоты, которое подстраивается под UserControl. Можно вызывать модально и не модально.