Ответы пользователя по тегу C#
  • Есть ли хорошие книги для начала изучения c#?

    Подойдёт для начала эти сайты: metanit и professorweb.
    Ответ написан
    Комментировать
  • Как заставить заработать триггеры в ListViewItem?

    @AquariusStar Автор вопроса
    Решил проблему. Оказалось, в попытках решить вопрос с шаблонами данных отключил словарь ресурса временно в App.xaml, который и ссылался на этот стиль. А затем и забыл про него. Поэтому и не работало всё. Теперь полностью заработало как надо.
    Ответ написан
    Комментировать
  • Как правильно реализовать привязку между элементами и массивами?

    @AquariusStar Автор вопроса
    Проблема решилась.
    Надо было исправить:
    <ContentControl Grid.Row="1" Name="Channel_1" Content="{Binding ControlChannelDevice[0]}"/>
    <ContentControl Grid.Row="1" Name="Channel_2" Content="{Binding ControlChannelDevice[1]}"/>
    <ContentControl Grid.Row="1" Name="Channel_3" Content="{Binding ControlChannelDevice[2]}"/>
    <ContentControl Grid.Row="1" Name="Channel_4" Content="{Binding ControlChannelDevice[3]}"/>

    и:
    Channel_1.DataContext = ControlChannelsDevice;
    Channel_2.DataContext = ControlChannelsDevice;
    Channel_3.DataContext = ControlChannelsDevice;
    Channel_4.DataContext = ControlChannelsDevice;
    Ответ написан
    Комментировать
  • Как связать свойства Label из DataTemplate с Template Style?

    @AquariusStar Автор вопроса
    Решение найдено:
    <DataTemplate x:Key="SelectContext">
            <Border x:Name="Data">
                <Grid x:Name="ContentBase" Margin="1,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Label
                        Grid.Column="0"
                        Margin="0"
                        Padding="0"
                        HorizontalAlignment="Left"
                        Content="{Binding Content, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentPresenter}}"
                        Foreground="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentPresenter}}" />
                    <RadioButton
                        Name="_1"
                        Grid.Column="1"
                        Content="1"
                        Style="{StaticResource RadioButtonKeys}" />
                    <RadioButton
                        Name="_2"
                        Grid.Column="2"
                        Content="2"
                        Style="{StaticResource RadioButtonKeys}" />
                    <RadioButton
                        Name="_3"
                        Grid.Column="3"
                        Content="3"
                        Style="{StaticResource RadioButtonKeys}" />
                </Grid>
            </Border>
        </DataTemplate>

    Надо заменить с
    Foreground="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentPresenter}}"
    на
    Foreground="{Binding Foreground, RelativeSource={RelativeSource Mode=Self}}"
    Ответ написан
    Комментировать
  • Как получить новое значение при смене указателя в радиокнопке, а не старое?

    @AquariusStar Автор вопроса
    Нашёл решение в рамках данного вопроса. Оказывается, есть определённый нюанс следования событий.

    <!--  ListBoxItem  -->
        <Style x:Key="Item"
               BasedOn="{x:Null}"
               TargetType="{x:Type ListBoxItem}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            <Setter Property="Foreground" Value="Black"/>
            <Setter Property="Height" Value="42"/>
            <Setter Property="Margin" Value="-2,0,0,0"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Grid x:Name="ListItem">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock x:Name="ListItem_Text"
                                       Grid.Column="0"
                                       Padding="10,0"
                                       HorizontalAlignment="Left"
                                       VerticalAlignment="Center"
                                       FontSize="13"
                                       FontWeight="Medium"
                                       Foreground="{TemplateBinding Foreground}"
                                       Text="{TemplateBinding Content}"/>
                            <RadioButton x:Name="PART_SelectVariable_1"
                                         Grid.Column="1"
                                         Content="Вариант 1"
                                         IsEnabled="{TemplateBinding IsEnabled}"
                                         Style="{StaticResource {x:Type ToggleButton}}"/>
                            <RadioButton x:Name="PART_SelectVariable_2"
                                         Grid.Column="2"
                                         Content="Вариант 2"
                                         IsEnabled="{TemplateBinding IsEnabled}"
                                         Style="{StaticResource {x:Type ToggleButton}}"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="ListItem" Property="Background" Value="#FF203FE6"/>
                                <Setter TargetName="ListItem_Text" Property="Foreground" Value="White"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="ListItem" Property="Background" Value="LightGray"/>
                                <Setter TargetName="ListItem_Text" Property="Foreground" Value="DarkGray"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter TargetName="ListItem" Property="Background" Value="#FFFDDFAD"/>
                                <Setter TargetName="ListItem_Text" Property="Foreground" Value="#FFA47C38"/>
                            </Trigger>
                            <Trigger Property="local:Styles.IsRadioButton" Value="-1">
                                <Setter Property="DataContext" Value="0"/>
                                <Setter TargetName="PART_SelectVariable_1" Property="IsChecked" Value="false"/>
                                <Setter TargetName="PART_SelectVariable_2" Property="IsChecked" Value="false"/>
                            </Trigger>
                            <DataTrigger Binding="{Binding ElementName=PART_SelectVariable_1, Path=IsPressed}"
                                         Value="True">
                                <Setter TargetName="ListItem" Property="Background" Value="#FFE8E9F2"/>
                                <Setter TargetName="ListItem_Text" Property="Foreground" Value="#FF9A9FB8"/>
                                <Setter Property="local:Styles.IsRadioButton" Value="1"/>
                                <Setter Property="IsSelected" Value="True"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=PART_SelectVariable_2, Path=IsPressed}"
                                         Value="True">
                                <Setter TargetName="ListItem" Property="Background" Value="#FFE8E9F2"/>
                                <Setter TargetName="ListItem_Text" Property="Foreground" Value="#FF9A9FB8"/>
                                <Setter Property="local:Styles.IsRadioButton" Value="2"/>
                                <Setter Property="IsSelected" Value="True"/>
                            </DataTrigger>
    
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


    Если засунуть local:PeakHelper.IsRadioButton в триггер IsChecked, а вызывать смену активного указателя SelectedIndex в IsPressed, то данные буду получать старые. А надо было сразу всё в IsPressed.
    Так как IsPressed по следованию событий идёт первым, а вторым - уже IsChecked.
    Ответ написан
    Комментировать
  • Как подключить библиотеку в visual studio c#?

    Обозреватель решений - Ссылки - Правая кнопка мыши - Добавить ссылку - Обзор - Обзор... - Выбираете файл - Ставите галочку - Ок. В ссылках она должна появиться.
    5a91c9972dee5390980757.png
    Ответ написан
    1 комментарий
  • C++ vs C#. Что больше подходит для моих задач?

    Для понимания указателей нужно знать язык программирования низкого уровня: ассемблер. Именно ассемблер может более точно объяснить принцип работы указателей. Так как указатели пришли из мира низкоуровневого программирования. Но написали вы странно: когда пишете про C#, то пишете, что знакомы с ООП, а когда пишете про C++ - уже незнакомы с ООП. ООП - это всего лишь подход к программированию. И этот подход для каждого языка программирования общий. Если хотите писать игры на C#, то для этого есть Unity. Да и для большинства прикладных задач будет достаточно C#. С++ - хорош для реализации производительных задач. Порой на практике используют смешанный подход: что требуется для высокой производительности - пишут на С++, а всё остальное - уже на C#. Вполне нормальная практика. В программировании важно уметь работать с алгоритмами, продумывать весь механизм работы, понимать, как всё работает. С плохим алгоритмом на любом языке программирования программа работать будет плохо.
    Ответ написан
    Комментировать
  • Какие технологии .NET стоит изучать сейчас?

    WPF нисколько не умирает. Это какие-то странные слухи. Например, в последней версии .NET Framework 4.7 включили обновления для WPF, и он достаточно внушительный. И он будет развиваться и дальше. UWP (у него такой же язык, что и у WPF: XAML) обычно завязан на магазине Microsoft и требует только последние версии Windows, насколько я помню. Ещё до сих пор существует WinForm, и он не собирается пока сдавать свои позиции. Если вам нравится этот язык, то работайте с ними, осваивайте новое. Изучать всё сразу не получится, слишком большой охват. Лучше изучать по ходу дела. Я именно так поступаю. Когда нужно новое или оптимальное решение, то ищу его. Главное, тут набить руку в программировании. WPF и ASP.NET MVC - разные направления. Первые нацелены на настольные решения, а вторые - уже веб-решения. А уж дальше уже зависит от поставленных задач.
    Ответ написан
    2 комментария
  • С# и Json - Как полученные данные записать в массив?

    Есть библиотека Json NetWork, который решает эти задачи.
    У вас будет примерно такая структура получаемых данных:
    public struct Top
    {
        public Response response;
        
        public struct Response
        {
            public int count;
            public int[] items;
        }
    }
    Ответ написан
    3 комментария
  • C# Ошибка с пространством имен?

    Вы должны представить пример полностью для разбора проблемы. А то мне пришлось добавлять недостающие. А так проверьте пространство имён. Возможно, вы просто не дописали K в подключении using.
    Ответ написан
    Комментировать
  • Почему так страдает разрешение?

    Судя по скриншоту, вы используете WinForms, который не умеет работать, отличный от стандартного DPI 96. Если вы хотите, чтобы всё корректно отображалось, то нужно переходить на WPF/UWP.
    Ответ написан
    Комментировать
  • Что такое методы?

    Методы - это подпрограммы, которые могут быть вызваны для выполнения отдельных задач. Они помогают упростить код или разбить сложную программу на множество небольших и простых кусков, где можно отдельно подправить или переделать. Такой подход в разы снижает число возможных ошибок и ускоряет разработку. И ещё методы позволяют отдельно переносить в новые программы. Так как алгоритмы конкретных задач не меняются, то можно не писать всё заново, а взять уже существующий код в текущий проект.
    Ответ написан
    1 комментарий
  • Почему не работают кортежи?

    Добавьте using System.ValueTuple. Всплывающее сообщение вам прямо подсказывает. В ссылках должен быть этот пункт: image009.png
    Ответ написан
    3 комментария
  • Как правильно реализовывать события в С#?

    Я с недавнего времени использую такой короткий класс в своём проекте. А в начале было слишком много событий. Теперь гоняю через конкретные имена.
    public class Intercom
        {
            #region Обработка событий по изменению содержимых.
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(string propertyName = "")
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
            #endregion
    
            #region Управление свойством.
            public string Message { get; set; } = "Null";
            public bool OnEvent { get; set; } = true;
            public void Reset() { Message = "Null"; }
    
            #endregion
    
            #region Внутренее свойство события.
            private int _Calling;
            private string _Response;
            private string _Request;
            private string _Report;
    
            public int Calling
            {
                get { return _Calling; }
                set { _Calling = value; if (OnEvent) NotifyPropertyChanged($"Call.{Message}"); }
            }
            public string Response
            {
                get { return _Response; }
                set { _Response = value; if (OnEvent) NotifyPropertyChanged($"Response.{Message}"); }
            }
            public string Request
            {
                get { return _Request; }
                set { _Request = value; if (OnEvent) NotifyPropertyChanged($"Request.{Message}"); }
            }
            public string Report
            {
                get { return _Report; }
                set { _Report = value; if (OnEvent) NotifyPropertyChanged($"Report.{Message}"); }
            }
            #endregion
        }


    А потом к нему подписываешься с помощью += <вызываемая функция>
    Ответ написан
    1 комментарий
  • Как вытащить конкретные данные в TemplateBinding?

    @AquariusStar Автор вопроса
    Отвечу на свой вопрос. Решение: Binding Path=Content.Port, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}
    Ответ написан
    Комментировать
  • Подходит ли Java для desktop и MS Office?

    Я в своё время изучал Java. Но тогда язык принадлежал Sun Microsystem. А когда Oracle приобрела Java, то я понял, что этот язык будет развиваться куда медленней. Достаточно посмотреть на OpenOffice. Если вы хотите реализовать графические изыски, то Java в этом направлении слабоват. (Не стоит путать с Java для Android, там вообще Oracle хочет поиметь с Google деньги за внесение изменений и адаптаций для нужд Android. В своё время Sun Microsystem не возражал такому подходу, и всячески поддерживал. Недавняя новость, что Google присоединился к проекту .NET Foundament. Есть основания полагать, что C# получит ещё большее распространение на Android. Да .NET Core является кроссплатформенным, что может добавить куда большей популярности C#.) У C# со своими WPF и UWP намного больше возможностей. Надо сказать, что C# очень активно развивается. Недавно C# получила версию 7.0, позволяющую программисту расширить возможности при создании программ.
    Ответ написан
    Комментировать
  • Какие есть понятные и хорошие учебники по C# для новичка?

    Можно поучиться по C# и WPF на сайтах: metanit.com и https://professorweb.ru. Там достаточно понятно. Остальное можно набраться знаний только в процессе практики программирования. Если учить сразу на Visual Studio, то столько запоминать не придётся: достаточно подсказок, чтобы понять, что делает та или иная функция, метод и прочее.
    Ответ написан
    Комментировать
  • Как при наведении курсора на UserControl изменить свойства элементов внутри её?

    @AquariusStar Автор вопроса
    Проблема решилась. Оказалось, что ошибка типов в классе DependencyObject. А решение: вышеприведённый код.
    Ответ написан
    Комментировать