Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/143: Рейтинг темы: голосов - 143, средняя оценка - 4.52
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18238 / 14152 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1

FAQ по WPF

03.06.2016, 14:51. Показов 29760. Ответов 5
Метки faq, wpf (Все метки)

Студворк — интернет-сервис помощи студентам
Здесь находятся ответы на часто задаваемые вопросы по Windows Presentation Foundation (WPF).
Для добавления сюда новых вопросов и ответов обращайтесь к модераторам или в тему обсуждения FAQ.
4
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2016, 14:51
Ответы с готовыми решениями:

Чем определяется одинаковость урлов /page?FAQ и /page.php?FAQ
Подскажите, пожалуйста, какая опция php или настройка сервера позволяет не указывать .php в урлах? Просто раньше у меня на сайте работал...

WPF async void fun() для событий контролла. (MapCOntrol.WPF)
Задача: Отмечаем чекбокс элементы и рисуем их на карте. При нажатии на кнопку выполняется событие, где вызывается функция, в которой...

WPF команды и MVVM. Часть 1. [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Для использования и создания WPF команд в Net предусмотрен...

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18238 / 14152 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
03.06.2016, 15:15  [ТС]
Как найти элемент управления по имени на любом уровне вложенности?

В этом может помочь класс System.Windows.Media.VisualTreeHelper и следующая функция:
FindChild<T>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
/// Ищет дочерний элемент с указанным типом и именем в визуальном дереве
/// </summary>
/// <param name="parent">Родительский элемент который содержит искомый элемент</param>
/// <typeparam name="T">Тип искомого элемента</typeparam>
/// <param name="childName">Имя искомого элемента</param>
/// <returns>
/// Элемент с искомым именем и типом;
/// Если childName равен null, то первый элемент с указанным типом;
/// null если искомый элемент не найден.
/// </returns>
public static T FindChild<T>(DependencyObject parent, string childName)
    where T : DependencyObject
{
    if (parent == null) return null;
 
    if (parent is T && parent is FrameworkElement && ((FrameworkElement)parent).Name == childName)
    {
        return (T)parent;
    }
 
    int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < childrenCount; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(parent, i);
        T obj = FindChild<T>(child, childName);
        if (obj != null) return obj;
    }
 
    return null;
}
7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18238 / 14152 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
12.06.2016, 18:42  [ТС]
Как отключить вывод уведомлений о ошибках JavaScript в элементе управления WebBrowser?

ОтветДобавьте следующую функцию:
C#
1
2
3
4
5
6
7
8
9
10
using System.Reflection;
...
public void HideScriptErrors(WebBrowser wb, bool Hide)
{
    FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
    if (fiComWebBrowser == null) return;
    object objComWebBrowser = fiComWebBrowser.GetValue(wb);
    if (objComWebBrowser == null) return;
    objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide });
}
Затем добавьте подписку на событие Navigated:
C#
1
wb.Navigated += (sender, args) => { HideScriptErrors((WebBrowser)sender, true); };
6
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
06.10.2016, 10:36
Как исправить ошибку "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток"?

ОтветВ WPF изменение свойств классов, унаследованных от DispatcherObject (кроме Freezable), возможно только из основного потока программы. Обращение к объектам следует производить через методы Dispatcher.Invoke или Dispatcher.BeginInvoke.
C#
1
2
3
4
this.Dispatcher.Invoke(() =>
{
    /* Код, на котором возникает ошибка */
});
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
07.09.2018, 01:15
Тема: Текст подсказки в поле TextBox
После долгих поисков, многочисленных проб и ошибок, что-то сам научился делать. Из своего опыта привожу здесь четыре варианта наиболее наглядных, на мой взгляд, для обучения.
  • Вариант 1 - только XAML
Взят с ресурса stackoverflow.com - TextBox Подсказка
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
    <Grid Background="White">
        <Grid.Resources>
            <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
        </Grid.Resources>
        <TextBlock x:Name="textBlock" Margin="5,2" Text="This prompt dissappears as you type..." Foreground="{Binding BorderBrush, ElementName=txtUserEntry}"
                       Visibility="{Binding Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=txtUserEntry}"/>
        <TextBox Name="txtUserEntry" Background="{x:Null}"/>
    </Grid>
Цвет фона поля устанавливается в Grid.Background, Текст и цвет подсказки устанавливаются в TextBlock.Text и TextBlock.Foreground. В данном случае цвет подсказки привязан к цвету границы TextBox.
Принцип работы:
Кликните здесь для просмотра всего текста
  • В контейнере Grid накладываются друг на друга TextBlock и TextBox.
  • У обоих элементов прозрачный фон, поэтому фон Grid определяет общий фон наложенных элементов
  • Оба растянуты по размеру Grid, а размеры Grid - Auto (по умолчанию), поэтому границы всех элементов совпадают, и т.к. Border есть только у TextBox, то только он и отображается.
  • Текст подсказки указывается в TextBlock.Text
  • В свойстве TextBlock.Visibility установлена связка со свойством txtUserEntry.Text.IsEmpty и с помощью ковертера BooleanToVisibilityConverter преобразуется в значение видимости. Если TextBox пуст, то TextBlock отображается, иначе он - невидим.
Вариант 2 - только XAML
Создан для изучения работы тригеров
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    <!--Общий контейнер визуально объединяющий TextBlock и TextBox
            Background - Цвет фона-->
    <Grid Background="White">
        <!--TextBlock для текста по умолчанию
                Foreground - Цвет шрифта для текста по умолчанию-->
        <TextBlock x:Name="my_TextBlock" Foreground="LightGray" Margin="5,2" Text="Текст по умолчанию когда пустой TextBox...">
            <TextBlock.Style>
                <!--Установка стиля-->
                <Style>
                            
                    <!-- По умолчанию - скрыть TextBlock -->
                    <Setter Property="TextBlock.Visibility" Value="Hidden"/>
                            
                    <Style.Triggers>
                                
                        <!-- Показать TextBlock, если он пустой -->
                        <DataTrigger Binding="{Binding Text, ElementName=my_TextBox}"  Value="">
                            <Setter Property="TextBlock.Visibility" Value="Visible"></Setter>
                        </DataTrigger>
                                
                        <!-- Показать TextBlock, если он Null -->
                        <DataTrigger Binding="{Binding Text, ElementName=my_TextBox}"  Value="{x:Null}">
                            <Setter Property="TextBlock.Visibility" Value="Visible"></Setter>
                        </DataTrigger>
                            
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
 
        <!-- TextBox для ввода -->
        <TextBox Name="my_TextBox" Background="{x:Null}"/>
                
    </Grid>
Отличается от первого варианта только заменой конвертера на DataTrigger. Отличающиеся моменты закомментированы в коде.

Вариант 3 - XAML и C#.
UserControl созданный из второго варианта.
XAML UserControl
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<UserControl x:Name="userControl" x:Class="TextBox_выделение_цветом_и_текст_по_умолчанию.my_UserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:TextBox_выделение_цветом_и_текст_по_умолчанию"
             mc:Ignorable="d" Background="White" >
 
    <!-- Мой вариант UserControl
                    На основе контейнера Grid c использованием тригеров -->
 
    <!--Общий контейнер визуально объединяющий TextBlock и TextBox-->
 
    <Grid x:Name="PART_grid" >
 
        <!--TextBlock для текста по умолчанию
                        Foreground - Цвет шрифта для текста по умолчанию-->
        <TextBlock x:Name="PART_TextBlock" 
                    Foreground="{Binding DefaultTextBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}" 
                    Margin="5,0" Text="{Binding DefaultText, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontStyle="{Binding FontStyle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontSize="{Binding FontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontFamily="{Binding FontFamily, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontStretch="{Binding FontStretch, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
        >
            <TextBlock.Style>
                <!--Установка стиля-->
                <Style>
                    <!--По умолчанию - скрыть TextBlock-->
                    <Setter Property="UIElement.Visibility" Value="Hidden"/>
                    <Style.Triggers>
                        <!--Показать TextBlock, если он пустой или Null.-->
                        <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"  Value="">
                            <Setter Property="UIElement.Visibility" Value="Visible"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"  Value="{x:Null}">
                            <Setter Property="UIElement.Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
 
        <!-- TextBox для ввода -->
        <TextBox x:Name="PART_TextBox"     Background="{x:Null}" 
                 Foreground="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}" 
                 FontStyle="{Binding FontStyle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 FontSize="{Binding FontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 FontFamily="{Binding FontFamily, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 FontStretch="{Binding FontStretch, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
 
</UserControl>

XAML.cs для присоединённых свойств
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
 
namespace TextBox_выделение_цветом_и_текст_по_умолчанию
{
    /// <summary>
    /// Логика взаимодействия для my_UserControl.xaml
    /// </summary>
    public partial class my_UserControl : UserControl
    {
        public my_UserControl()
        {
            InitializeComponent();
        }
 
        /// <summary>Свойство для цвета текста подсказки</summary>
        public Brush DefaultTextBrush
        {
            get { return (Brush)GetValue(DefaultTextBrushProperty); }
            set { SetValue(DefaultTextBrushProperty, value); }
        }
        public static readonly DependencyProperty DefaultTextBrushProperty =
            DependencyProperty.Register("DefaultTextBrush", typeof(Brush), typeof(my_UserControl), new PropertyMetadata(SystemColors.InactiveSelectionHighlightBrush));
 
        /// <summary>Свойство для текста подсказки</summary>
        public string DefaultText
        {
            get { return (string)GetValue(DefaultTextProperty); }
            set { SetValue(DefaultTextProperty, value); }
        }
        public static readonly DependencyProperty DefaultTextProperty =
            DependencyProperty.Register("DefaultText", typeof(string), typeof(my_UserControl), new PropertyMetadata("Текст по умолчанию - когда пустой TextBox...."));
 
        /// <summary>Свойство для текста ввода</summary>
        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(my_UserControl), new PropertyMetadata(null));
 
    }
}
Присоединённые свойства: DefaultText и DefaultTextBrush - текст и цвет подсказки, Text - содержание поля ввода. Свойства описывающие текст в TextBox и TextBlock связаны с аналогичными свойствами у UserControl.
Пример использования
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
            <local:my_UserControl
                HorizontalAlignment="Left" 
                VerticalAlignment="Top" 
                DefaultTextBrush="Green"
                DefaultText="Фамилия, Имя, Отчество - полностью"/>


Вариант 4 - XAML и C#.
UserControl переработан из третьего варианта. Работа триггеров перенесена в код C# в обработчик события TextBox.TextChanged. Подсказка показывается и тогда когда в поле только пробелы.
XAML UserControl
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<UserControl x:Name="userControl" x:Class="TextBox_выделение_цветом_и_текст_по_умолчанию.my_UserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:TextBox_выделение_цветом_и_текст_по_умолчанию"
             mc:Ignorable="d" Background="White" >
 
    <!-- Мой вариант UserControl
                    На основе контейнера Grid c использованием тригеров -->
 
    <!--Общий контейнер визуально объединяющий TextBlock и TextBox-->
 
    <Grid x:Name="PART_grid" >
 
        <!--TextBlock для текста по умолчанию
                        Foreground - Цвет шрифта для текста по умолчанию-->
        <TextBlock x:Name="PART_TextBlock" 
                    Foreground="{Binding DefaultTextBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}" 
                    Margin="5,0" Text="{Binding DefaultText, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontStyle="{Binding FontStyle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontSize="{Binding FontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontFamily="{Binding FontFamily, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                    FontStretch="{Binding FontStretch, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}" />
 
        <!-- TextBox для ввода -->
        <TextBox x:Name="PART_TextBox"     Background="{x:Null}" 
                 Foreground="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}" 
                 FontStyle="{Binding FontStyle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 FontSize="{Binding FontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 FontFamily="{Binding FontFamily, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 FontStretch="{Binding FontStretch, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}}"
                 Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:my_UserControl}}, UpdateSourceTrigger=PropertyChanged}" TextChanged="PART_TextBox_TextChanged"/>
    </Grid>
 
</UserControl>

XAML.cs для присоединённых свойств и события изменения текста
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
 
namespace TextBox_выделение_цветом_и_текст_по_умолчанию
{
    /// <summary>Логика взаимодействия для my_UserControl.xaml</summary>
    public partial class my_UserControl : UserControl
    {
        public my_UserControl()
        {
            InitializeComponent();
        }
 
        /// <summary>Свойство для цвета текста подсказки</summary>
        public Brush DefaultTextBrush
        {
            get { return (Brush)GetValue(DefaultTextBrushProperty); }
            set { SetValue(DefaultTextBrushProperty, value); }
        }
        public static readonly DependencyProperty DefaultTextBrushProperty =
            DependencyProperty.Register("DefaultTextBrush", typeof(Brush), typeof(my_UserControl), new PropertyMetadata(SystemColors.InactiveSelectionHighlightBrush));
 
        /// <summary>Свойство для текста подсказки</summary>
        public string DefaultText
        {
            get { return (string)GetValue(DefaultTextProperty); }
            set { SetValue(DefaultTextProperty, value); }
        }
        public static readonly DependencyProperty DefaultTextProperty =
            DependencyProperty.Register("DefaultText", typeof(string), typeof(my_UserControl), new PropertyMetadata("Текст по умолчанию - когда пустой TextBox...."));
 
        /// <summary>Свойство для текста ввода</summary>
        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set
            {
                SetValue(TextProperty, value);
            }
        }
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(my_UserControl), new PropertyMetadata(null));
 
        /// <summary>Обработчик события изменения текста, устанавливающий видимость/невидимость текста подсказки</summary>
        private void PART_TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
                if (string.IsNullOrWhiteSpace(Text)) PART_TextBlock.Visibility = Visibility.Visible;
                else PART_TextBlock.Visibility = Visibility.Hidden;
        }
    }
}

Используется также как третий вариант.
4
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18238 / 14152 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
13.05.2022, 20:06  [ТС]
Как создать ImageSource из массива байтов или потока?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static class ByteImageConverter
{
    public static ImageSource FromStream(Stream stream)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.StreamSource = stream;
        bitmap.EndInit();
 
        return (ImageSource)bitmap;
    }
 
    public static FromBytes(byte[] imageData)
    {
        using (MemoryStream mstream = new MemoryStream(imageData))
        {
            return FromStream(mstream);
        }
    }
}
P.S.1) Если методы ByteImageConverter вызываются не из UI потока, то полученный от них результат нужно заморозить перед передачей в UI поток.
Пример: допустим, результат присваивается свойству VM, а получение потока и конвертация происходит асинхронно, чтобы не лагал GUI:
C#
1
2
3
4
5
6
7
8
9
10
await Task.Run(() =>
{
    Stream stream = GetStream(...); // Какой-то запрос потока.
 
    ImageSource image = ByteImageConverter.FromStream(stream); // Преобразование потока в ImageSource.
 
    image.Freeze(); // Заморозка изображения.
 
    ImageProperty = image; // Замороженное изображение можно вернуть в любой поток.
});
Пример для Code Behind:
C#
1
2
3
4
5
6
7
8
9
10
image.Source = await Task.Run(() =>
{
    Stream stream = GetStream(...); // Какой-то запрос потока.
 
    ImageSource image = ByteImageConverter.FromStream(stream); // Преобразование потока в ImageSource.
 
    image.Freeze(); // Заморозка изображения.
 
    return image; // Замороженное изображение можно вернуть в любой поток.
});
2) Если передача byte[] в UI элемент происходит посредством привязки, то предварительная конвертация массива байт в ImageSource не нужна. Эта конвертация уже встроена в Привязку (Binding).
C#
1
2
// Присвоение свойству типа "Byte[]" можно делать в любом потоке.
await Task.Run(() => ImageBytes = GetBytes(...));
XML
1
<Image Source="{Binding ImageBytes}"/>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2022, 20:06
Помогаю со студенческими работами здесь

Открыть WPF внутри другого WPF окна
Добрый день! Имеется задача: В WPF окне (назовем его MainWindow.xaml с привязкой к MainWindow.xaml.cs), имеется элемент Frame...

Вызов окошка WPF из другого окна WPF
Всем доброго времени суток. Подскажите пожалуйста как мне вызвать из главного окна WPF другую. Я тут искал, но нашел только как вызвать...

WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html На практике часто встречаются случаи когда команда и кнопка...

FAQ
Задавайте вопросы по РСЯ. Накопятся, отвечу.

FAQ
Отвечаю по мере накопления.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Закрытая тема Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru