Avalonia или wpf c autocad net api

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

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Avalonia или wpf c autocad net api
« : 29-10-2020, 12:52:07 »
Здравствуйте, подскажите кто нибудь пользовался фреймворком Avalonia? Мне его порекомендовали в группе шарпистов, после того как я спросил как забиндить TextBlock который находится в combobox, сказали там легко это делается, я и с wpf мучаюсь думал надо ли еще прыгать на что то новое, а вдруг работать не будет в autocad, вот решил посоветоваться стоит, нет или лучше с wpf мучатся. В обычный комбобох получается забиндить, пользовался примерыми которые тут были, но хотел в  один комбобох вывести название атрибута блока и рядом его значение, вот не знаю как сделать, это кажется уже 2 вопрос получился

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #1 : 29-10-2020, 13:03:29 »
И в чём там сложность?

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Avalonia или wpf c autocad net api
« Ответ #2 : 29-10-2020, 13:05:10 »
И в чём там сложность?
где в wpf? не могу забиндить в текстблок данные который находится в комбобох

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #3 : 29-10-2020, 13:10:46 »
И в чём там сложность?
где в wpf? не могу забиндить в текстблок данные который находится в комбобох
Интерфейс строится динамически? Как я понимаю, ты что-то выбираешь в ComboBox, а это отображается в TextBlock?

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Avalonia или wpf c autocad net api
« Ответ #4 : 29-10-2020, 13:13:20 »
Интерфейс строится динамически? Как я понимаю, ты что-то выбираешь в ComboBox, а это отображается в TextBlock?
данные в комбобок должны попадать как пользователь выберет блок, нет в комбобоксе техтблок, вот так

Код - C# [Выбрать]
  1.  <ComboBox Grid.Column="1"
  2.                   Name="ComboBox2"
  3.                   ItemsSource="{Binding DataContext.Tags,
  4.                                RelativeSource={RelativeSource AncestorType=ComboBox}}" Height="40" >
  5.             <ComboBox.ItemTemplate>
  6.                 <DataTemplate>
  7.                     <Border BorderBrush="LightYellow" BorderThickness="1.5" Width="{Binding ElementName=ComboBox2, Path=Width}" >
  8.                         <StackPanel Orientation="Vertical">
  9.                             <StackPanel Orientation="Horizontal">
  10.                                 <TextBlock FontWeight="Thin">Атрибут:</TextBlock>
  11.                                 <TextBlock FontWeight="Bold" Text="{Binding }" ></TextBlock>
  12.                             </StackPanel>
  13.                             <StackPanel Orientation="Horizontal">
  14.                                 <TextBlock FontWeight="Thin">Значение:</TextBlock>
  15.                                 <TextBlock FontWeight="Bold" Text="{Binding }"></TextBlock>
  16.                             </StackPanel>
  17.                         </StackPanel>
  18.                     </Border>
  19.                 </DataTemplate>
  20.             </ComboBox.ItemTemplate>
  21.         </ComboBox>
  22.  

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #5 : 29-10-2020, 13:26:07 »
Интерфейс строится динамически? Как я понимаю, ты что-то выбираешь в ComboBox, а это отображается в TextBlock?
данные в комбобок должны попадать как пользователь выберет блок, нет в комбобоксе техтблок, вот так

Код - C# [Выбрать]
  1.  <ComboBox Grid.Column="1"
  2.                   Name="ComboBox2"
  3.                   ItemsSource="{Binding DataContext.Tags,
  4.                                RelativeSource={RelativeSource AncestorType=ComboBox}}" Height="40" >
  5.             <ComboBox.ItemTemplate>
  6.                 <DataTemplate>
  7.                     <Border BorderBrush="LightYellow" BorderThickness="1.5" Width="{Binding ElementName=ComboBox2, Path=Width}" >
  8.                         <StackPanel Orientation="Vertical">
  9.                             <StackPanel Orientation="Horizontal">
  10.                                 <TextBlock FontWeight="Thin">Атрибут:</TextBlock>
  11.                                 <TextBlock FontWeight="Bold" Text="{Binding }" ></TextBlock>
  12.                             </StackPanel>
  13.                             <StackPanel Orientation="Horizontal">
  14.                                 <TextBlock FontWeight="Thin">Значение:</TextBlock>
  15.                                 <TextBlock FontWeight="Bold" Text="{Binding }"></TextBlock>
  16.                             </StackPanel>
  17.                         </StackPanel>
  18.                     </Border>
  19.                 </DataTemplate>
  20.             </ComboBox.ItemTemplate>
  21.         </ComboBox>
  22.  
Ты читал про MVVM? Делай промежуточный класс и запихивай его в .DataContext. Либо гугли DataContext WPF.

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Avalonia или wpf c autocad net api
« Ответ #6 : 29-10-2020, 13:39:15 »
Ты читал про MVVM? Делай промежуточный класс и запихивай его в .DataContext. Либо гугли DataContext WPF.
да читал, не получается в предыдущий забиндить вот в такой обычный комбобокс вывожу данные
Код - C# [Выбрать]
  1. <ComboBox Margin="5,0" ItemsSource="{Binding LayerNames}" SelectedItem="{Binding SelectedNameIn}"/>
  2.  

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #7 : 29-10-2020, 13:52:51 »
У тебя какая задача? Когда выбираешь блок, то в ComboBox записываются все атрибуты и их значения?

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Avalonia или wpf c autocad net api
« Ответ #8 : 29-10-2020, 14:13:35 »
У тебя какая задача? Когда выбираешь блок, то в ComboBox записываются все атрибуты и их значения?
да в одном комбобоксе Атрибут и Значение, как на картинке



записываю в комбобокс так
Код - C# [Выбрать]
  1. List<AttCombo> combolist = new List<AttCombo>();
  2.  
  3.             combolist.Add(new AttCombo("odin","1"));
  4.             combolist.Add(new AttCombo("два", "2"));
  5.  
  6.             ComboBox2.ItemsSource = combolist;
  7.  

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Avalonia или wpf c autocad net api
« Ответ #9 : 29-10-2020, 14:14:27 »
Как я понял, Avalonia используется для кроссплатформенной разработки. То есть, там, где применить WPF нет возможности. Какой прок от неё в разработке под AutoCAD?

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #10 : 29-10-2020, 14:22:09 »
У тебя какая задача? Когда выбираешь блок, то в ComboBox записываются все атрибуты и их значения?
да в одном комбобоксе Атрибут и Значение, как на картинке



записываю в комбобокс так
Код - C# [Выбрать]
  1. List<AttCombo> combolist = new List<AttCombo>();
  2.  
  3.             combolist.Add(new AttCombo("odin","1"));
  4.             combolist.Add(new AttCombo("два", "2"));
  5.  
  6.             ComboBox2.ItemsSource = combolist;
  7.  
А не пробовал в цикле, ну или не в цикле, вот так добавлять?
Код - C# [Выбрать]
  1. ComboBox.Items.Add();

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

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

А не пробовал в цикле, ну или не в цикле, вот так добавлять?
попробобовал, теперь collections выводит, проблема в том как записать нужные свойства в нужный текстблок

Отмечено как Решение Yusuf 29-10-2020, 16:18:47

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: Avalonia или wpf c autocad net api
« Ответ #12 : 29-10-2020, 15:11:09 »
Код - C# [Выбрать]
  1. using System.Collections.ObjectModel;
  2. using System.Linq;
  3. using System.Windows;
  4.  
  5. namespace WpfApp1
  6. {
  7.     public partial class MainWindow : Window
  8.     {
  9.         public MainWindow()
  10.         {
  11.             InitializeComponent();
  12.             ObservableCollection<Node> nodes = new ObservableCollection<Node>();
  13.             string[] names = { "First", "Second", "Third", "Forth", "Fifth", "Sixth", "Seventh" };
  14.             int[] values = { 1, 2, 3, 4, 5, 6, 7 };
  15.             for (int i=0; i<names.Count(); i++)
  16.             {
  17.                 Node node = new Node
  18.                 {
  19.                     AttributeName = $"Attribute Name: {names[i]}",
  20.                     AttributeValue = $"Attribute Value: {values[i]}"
  21.                 };
  22.                 nodes.Add(node);
  23.             }
  24.             cb.ItemsSource = nodes;
  25.         }
  26.     }
  27.  
  28.     public class Node
  29.     {
  30.         public string AttributeName { get; set; }
  31.         public string AttributeValue { get; set; }
  32.     }
  33. }

Код - XML [Выбрать]
  1. <Window x:Class="WpfApp1.MainWindow"
  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:WpfApp1"
  7.        mc:Ignorable="d"
  8.        Title="MainWindow"
  9.        Height="Auto"
  10.        Width="Auto"
  11.        SizeToContent="WidthAndHeight">
  12.     <Grid>
  13.         <ComboBox Name="cb"
  14.                  SelectedIndex="0">
  15.             <ComboBox.ItemTemplate>
  16.                 <DataTemplate>
  17.                     <Grid>
  18.                         <Grid.RowDefinitions>
  19.                             <RowDefinition Height="*"/>
  20.                             <RowDefinition Height="*"/>
  21.                         </Grid.RowDefinitions>
  22.                         <TextBlock Grid.Row="0"
  23.                                   Text="{Binding Path=AttributeName}"/>
  24.                         <TextBlock Grid.Row="1"
  25.                                   Text="{Binding Path=AttributeValue}"/>
  26.                     </Grid>
  27.                 </DataTemplate>
  28.             </ComboBox.ItemTemplate>
  29.         </ComboBox>
  30.     </Grid>
  31. </Window>

Попробуй вот такой способ

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

  • ADN Club
  • *****
  • Сообщений: 554
  • Карма: 119
Re: Avalonia или wpf c autocad net api
« Ответ #13 : 29-10-2020, 16:09:58 »
Какой прок от неё в разработке под AutoCAD?
Если не путаю, она в первую очередь упрощает создание сложных интерфейсов, и с помощью ее был написан SharpDevelop.
Просто надстройка над WPF уменьшающая количество кода.

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

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