Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229

Ошибка стиля кнопки

29.09.2021, 00:27. Показов 5410. Ответов 41

Студворк — интернет-сервис помощи студентам
Пытаюсь установить стиль для кнопки и получаю ошибку:
Code
1
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=Border'. BindingExpression:Path=IsMouseOver; DataItem=null; target element is 'Button' (Name=''); target property is 'NoTarget' (type 'Object')
Интересно что на трех других окнах стиль работает нормально. И отличаются они только размерами
Код стиля и кнопки: https://pastebin.com/q5HqH5T1
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
        <Button
            Style="{DynamicResource LightGrayButton}"
            Grid.Column="2" Grid.Row="2">
            <Image Source="{StaticResource Night}" />
        </Button>
 
    // Именно этот стиль привязан к кнопке
    <Style x:Key="LightGrayButton" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonChangableBackgroundOpacity}">
        <Setter Property="Background" Value="{StaticResource TLightGray}"/>
    </Style>
 
 
    // Родительский стиль
<Style x:Key="ButtonChangableBackgroundOpacity" TargetType="{x:Type Button}">
        <Setter Property="BorderThickness" Value="0"></Setter>
        <Setter Property="Cursor" Value="Hand"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name ="Border"
                        CornerRadius="5"
                        Background="{TemplateBinding Background}">
                        <Grid>
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsMouseOver, ElementName=Border}" Value="True">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation To="1" Duration="0:0:0.3" Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.(SolidColorBrush.Opacity)"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation To="0" Duration="0:0:0.3" Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.(SolidColorBrush.Opacity)"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
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
// сама кнопка, лежит в гриде как и все другие кнопки в других окнах
        <Button
            Style="{DynamicResource LightGrayButton}"
            Grid.Column="2" Grid.Row="2">
            <Image Source="{StaticResource Night}" />
        </Button>
 
    // Именно этот стиль привязан к кнопке
    <Style x:Key="LightGrayButton" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonChangableBackgroundOpacity}">
        <Setter Property="Background" Value="{StaticResource TLightGray}"/>
    </Style>
 
 
    // Родительский стиль
<Style x:Key="ButtonChangableBackgroundOpacity" TargetType="{x:Type Button}">
        <Setter Property="BorderThickness" Value="0"></Setter>
        <Setter Property="Cursor" Value="Hand"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name ="Border"
                        CornerRadius="5"
                        Background="{TemplateBinding Background}">
                        <Grid>
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsMouseOver, ElementName=Border}" Value="True">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation To="1" Duration="0:0:0.3" Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.(SolidColorBrush.Opacity)"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation To="0" Duration="0:0:0.3" Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.(SolidColorBrush.Opacity)"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2021, 00:27
Ответы с готовыми решениями:

Создания стиля кнопки
Делаю стиль для кнопки и сталкнулся с такой проблемой, ни как не могу все привезать к гриду(т.е уменьшаю кнопку границы ее становятся не...

Настройка стиля кнопки
Хочу настроить стиль для кнопок на форме - когда наводишь на кнопку цвет кнопки плавно меняется. Код взял стандартный с msdn: ...

Изменение стандартного стиля кнопки
Добрый день. Проект UWP. Пытаюсь сделать свой дизайн кнопки. Необходимо, чтобы при нажатии кнопка чуть сдвигалась...

41
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
01.10.2021, 00:00  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Здесь из-за трея как-то ломается визуальное дерево окна.
Да, действительно, если не использовать трей, то никаких проблем нет. Попробую поискать другие варианты релизации трея или чтонибудь подумаю насчет анимаций, мб уберу их
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2021, 00:03
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Попробую поискать другие варианты релизации трея или чтонибудь подумаю насчет анимаций, мб уберу их
Я же написал выше:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Попробуйте задать обработчики на события MouseEnter и MouseLeavel.
Просто пустые методы - нужно только проверить будут они вызываться или нет.
Если будут вызываться, то анимацию можно будет сделать кодом в обработчиках.
Вы проверили?
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
01.10.2021, 00:13  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы проверили?
Да, оно работает. Вот и думаю как сделать)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2021, 09:25
Лучший ответ Сообщение было отмечено xr_Sanya как решение

Решение

Залейте фиксацию с подключенными обработчиками.
Я покажу как сделать.

Добавлено через 43 минуты
xr_Sanya, ещё косяк нашёл.
Вы же анимируете общий для всех ресурс.
Поэтому все меняются одновременно.

Я сейчас скину изменённый стиль.

Добавлено через 14 секунд
Пока фиксаций не делайте.

Добавлено через 31 минуту
Фиксация fd437cfe:
Попытка программной реализации анимации.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<Window x:Class="Light.Views.Tray.TrayMenuView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewModels="clr-namespace:Light.ViewModels"
        xmlns:tray="clr-namespace:Light.Views.Tray"
        ResizeMode="NoResize"
        WindowStartupLocation="Manual"
        WindowStyle="None"
        AllowsTransparency="True"
        Title="TrayMenu" 
        Topmost="True"
        Left="{Binding LeftLocation, UpdateSourceTrigger=PropertyChanged}"
        Top="{Binding TopLocation, UpdateSourceTrigger=PropertyChanged}"
        Background="White"
        Height="130" Width="130">
    <Window.DataContext>
        <viewModels:TrayMenuViewModel/>
    </Window.DataContext>
    <FrameworkElement.Resources>
 
        <!--Вот этот ресурс должем быть индивидуальным для каждой кнопки.
        Вы обращаетесь к свойству кнопки, на в ней ссылка на ресурс.
        Поэтому вы меняете сам ресурс, а не только свойство одной кнопки.-->
        <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
 
        <!--Ключ не задавал, чтобы стиль применялся автоматом ко всем кнопкам.-->
        <Style TargetType="{x:Type Button}">
 
            <!--Точно не уверен будут ли в этом случае работать сеттеры событий
            Если не будут, то придётся для каждой кнопки индивидуально задавать-->
            <EventSetter Event="MouseEnter" Handler="OnButtonMouseEnterLeave"/>
            <EventSetter Event="MouseLeave" Handler="OnButtonMouserEnterLeave"/>
 
            <!--Привяка к динамическому ресурсу. Теперь его можно менять для каждой кнопки.-->
            <Setter Property="Background" Value="{DynamicResource Border.Background}"/>
 
            <!--Задал Margin и Padding чтобы убрать сложный Grid в контенте Окна.-->
            <Setter Property="Margin" Value="4"/>
            <Setter Property="Padding" Value="4"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
 
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="Cursor" Value="Hand"/>
            <Setter Property="Template">
                <Setter.Value>
                    <!--Немного исправил шаблон и убрал анимацию.-->
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name ="Border"
                                CornerRadius="5"
                                Background="{TemplateBinding Background}"
                                Padding="{TemplateBinding Padding}">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </FrameworkElement.Resources>
    <UniformGrid Columns="1" Rows="4">
        <!--Чем наложение Rectangle и TextBlock, гораздо проще использовать вложение в Border.-->
        <Border
            Background="{StaticResource Black}">
            <TextBlock
                FontSize="20"
                Text="Light"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Foreground="White"/>
        </Border>
        <Button>
            <Grid>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="5*"/>
                        <ColumnDefinition Width="24*"/>
                    </Grid.ColumnDefinitions>
                    <!--Без фона не видно изображения. Поэтому задал дополнительный Border.-->
                    <Border Background="LightGray" VerticalAlignment="Center" HorizontalAlignment="Center">
                        <Image  Source="/Light;component/Resources/Images/turnoff.png"
                                Stretch="Uniform"/>
                    </Border>
                    <TextBlock HorizontalAlignment="Center"
                               Text="Завершить"
                               Grid.Column="2"
                               VerticalAlignment="Center" Margin="5,0"/>
                </Grid>
            </Grid>
            <Button.Resources>
                <!--Свой персональный ресурс кнопки. И так для каждой.-->
                <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
            </Button.Resources>
        </Button>
        <Button Content="Приостановить">
            <Button.Resources>
                <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
            </Button.Resources>
        </Button>
        <Button Content="Выйти">
            <Button.Resources>
                <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
            </Button.Resources>
        </Button>
    </UniformGrid>
</Window>
C#
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    public partial class TrayMenuView
    {
        public TrayMenuView()
        {
            InitializeComponent();
        }
 
        private void OnButtonMouserEnterLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            // Получение источника события и используемого ею ресурса.
            Button button = (Button)sender;
            Brush brush = button.Background;
 
            // Определение какое было событие. Используется для установки значения анимации
            bool isMouseEnter = e.RoutedEvent == MouseEnterEvent;
 
            // Создание и запуск анимации.
            DoubleAnimation animation = new DoubleAnimation()
            {
                To = isMouseEnter ? 1 : 0,
                Duration = TimeSpan.FromMilliseconds(300)
            };
            brush.BeginAnimation(Brush.OpacityProperty, animation);
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2021, 10:33
xr_Sanya, сделал ещё Фиксацию 0c342792:
Вариант с анимацией в стиле, а не в шаблоне.
Возможно такой вариант тоже сработает.
XML
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<Style TargetType="{x:Type Button}">
 
    <!--Точно не уверен будут ли в этом случае работать сеттеры событий
    Если не будут, то придётся для каждой кнопки индивидуально задавать--><!--
    <EventSetter Event="MouseEnter" Handler="OnButtonMouseEnterLeave"/>
    <EventSetter Event="MouseLeave" Handler="OnButtonMouserEnterLeave"/>-->
 
    <!--Привяка к динамическому ресурсу. Теперь его можно менять для каждой кнопки.-->
    <Setter Property="Background" Value="{DynamicResource Border.Background}"/>
 
    <!--Задал Margin и Padding чтобы убрать сложный Grid в контенте Окна.-->
    <Setter Property="Margin" Value="4"/>
    <Setter Property="Padding" Value="4"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
 
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="Cursor" Value="Hand"/>
    <Setter Property="Template">
        <Setter.Value>
            <!--Немного исправил шаблон и убрал анимацию.-->
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name ="Border"
                        CornerRadius="5"
                        Background="{TemplateBinding Background}"
                        Padding="{TemplateBinding Padding}">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsMouseOver, ElementName=Border}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="1" Duration="0:0:0.3" Storyboard.TargetProperty="Background.Opacity"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="0" Duration="0:0:0.3" Storyboard.TargetProperty="Background.Opacity"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
 
</Style>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2021, 10:41
xr_Sanya, сделал ещё Фиксацию 1f9a35bf:
Вариант с заморозкой кисти в ресурсах.
Возможно, в этом случае, анимация фона кнопки не будет влиять на другие кнопки.
Но может быть, что анимация не сработает или выдаст исключение. Надо тестить.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2021, 10:43
XML
24
25
26
        <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0" 
                         xmlns:ice="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
                         ice:Freeze="True"/>
XML
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
        <Button>
            <Grid>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="5*"/>
                        <ColumnDefinition Width="24*"/>
                    </Grid.ColumnDefinitions>
                    <!--Без фона не видно изображения. Поэтому задал дополнительный Border.-->
                    <Border Background="LightGray" VerticalAlignment="Center" HorizontalAlignment="Center">
                        <Image  Source="/Light;component/Resources/Images/turnoff.png"
                                Stretch="Uniform"/>
                    </Border>
                    <TextBlock HorizontalAlignment="Center"
                               Text="Завершить"
                               Grid.Column="2"
                               VerticalAlignment="Center" Margin="5,0"/>
                </Grid>
            </Grid>
            <!--<Button.Resources>
                --><!--Свой персональный ресурс кнопки. И так для каждой.--><!--
                <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
            </Button.Resources>-->
        </Button>
        <Button Content="Приостановить">
            <!--<Button.Resources>
                <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
            </Button.Resources>-->
        </Button>
        <Button Content="Выйти">
            <!--<Button.Resources>
                <SolidColorBrush x:Key="Border.Background" Color="LightGray" Opacity="0"/>
            </Button.Resources>-->
        </Button>
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
02.10.2021, 22:18  [ТС]
Элд Хасп
Я в последних коммитах изменил функционал для отображения трей меню для нестандартных настроек трея, теперь у вас должно оно отображаться, также пренес в ветку UITest эти исправления.
Ваши коммиты попробовал, но они к сожалению тоже не работают должным образом.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
03.10.2021, 09:50
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Я в последних коммитах изменил функционал
После запуска получаю в трее пяток нерабочих иконок xDosProc.exe и одну Light.exe.
При наведении курсора некоторые из xDosProc.exe сразу закрываются. Но парочка продолжает висеть.

С Light.exe - ничего не изменилось.
Работает как описал в пост #14.

Цитата Сообщение от xr_Sanya Посмотреть сообщение
Ваши коммиты попробовал, но они к сожалению тоже не работают должным образом.
Коммит fd437cfe (с обработчиком), в метод OnButtonMouserEnterLeave исполнение заходит?
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
05.10.2021, 02:17  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
С Light.exe - ничего не изменилось.
Изменил структуру запуска программы и создания окон в коммите 15dbb82 и все заработало, анимации стали применятся, точно не скажу из за чего. Коммит сам по себе большой, но посмотрите если интересно. Также предположительно пофиксил проблемы с треем и xDosProc.exe
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
05.10.2021, 03:49
Цитата Сообщение от xr_Sanya Посмотреть сообщение
коммите 15dbb82...
....
пофиксил проблемы с треем и xDosProc.exe
Нет, они остались.
Даже без запуска на исполнение, просто при загрузке Решения в Студии сразу появляются две иконки с xDosProc.exe.


Цитата Сообщение от xr_Sanya Посмотреть сообщение
все заработало, анимации стали применятся
У меня ничего не заработало.
Как было так всё и осталось.
Единственно после наведения на иконку в панели задач, показывается миниатюра окна с кнопками. Но самого окна нет.
Если кликнуть по миниатюре, то она становится чёрной как и раньше.

Кроме того появился какой-то страшный баг.
При запуске на исполнение сбиваются настройки монитора на тёплую тем - на экране всё становится светложёлто-ораженового оттенка.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
05.10.2021, 16:42
xr_Sanya, тест последнего релиза:
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.10.2021, 20:43
xr_Sanya, проверил текущую фиксацию e7155cc2.
Приложение скрывается в трее.
При ПКМ на иконке в трее появляется иконка на панели задач.
При наведении на эту иконку всплывает миниатюра Окна, но самого Окна нет.
При клике по миниатюре она пропадает и с ней пропадает иконка в панели задач.
При повторном ПКМ по иконке в трее выкидывается исключение:


В Дизайнере XAML много разных предупреждений о кривых ссылках:
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.10.2021, 21:07
xr_Sanya, ещё чё-то перемудрили со словарём локализации LangDictionary.xaml.
Оно может в рантайм и работает, но дизайнер его не види.
А это тоже сигнал о каких-то проблемах, и возможных багах, которые пока ещё себя просто не проявили.

Добавлено через 6 минут
Локализация - это часть UI.
ViewModel - это посредник Между View и Моделью.
Для Модели есть разница какая локализация выбрана в UI?
Нет.
Поэтому ничего касаемого локализаци не должно быть и в ViewModel.
Вот этот (и подобные) метод надо переделывать (если делать по феншую):
C#
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
        private void OnPauseCommandExecute()
        {
            if (_isAppPaused)
            {
                _periodWatcherService.StartWatch();
                WorkTimeKeyText = Localization.LangDictionary.GetString("Loc_TrayPause"); ;
            }
            else
            {
                _periodWatcherService.StopWatch();
                ScreenModel.SetDefaultColorTemperatureOnAllScreens();
                WorkTimeKeyText = Localization.LangDictionary.GetString("Loc_TrayUnPause"); ;
            }
            _isAppPaused = !_isAppPaused;
        }
Один из возможных вариантов.
VM посылает уникальный id сообщения (в том числе может быть и текст сообщения для InvariantCulture).
А UI по Id сообщения представляет сообщение в нужно локализации через конвертер локализации.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.10.2021, 21:22
xr_Sanya, не понял вашей реализации команд.
Очень куцая реализация и зачем-то ещё и на два класса разделена LambdaCommand и Command?
Зачем?


Немного стоит поправить и базовую VM.
Событие должно подыматься, если ИЗМЕНИЛОСЬ значение, а не при присвоении значения.

Как минимум нужно изменить так:
C#
1
2
3
4
5
6
7
8
        protected void Set<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
        {
            if(!Equals(field, value))
            {
                field = value;
                OnPropertyChanged(propertyName);
            }
        }
Да, и с таким функционалам это даже VM не назовёшь.
Для VM как минимум нужно, чтобы хотя бы время разработки определялось.
Так же не лишним будет получение Диспетчера.

Вот простые реализации: Simplified.7z.
Запишите их в какую-то библиотеку и потом подцепляйте к разным проектам.
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
13.10.2021, 22:08  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Приложение скрывается в трее.
Какое у вас разрешение экрана? И может есть дополнительные настройки поведения панели задач? Просто я не совсем понимаю природу такого поведения окна, оно у меня нормально отображается на моем компьютере, и трех виртуальных машинах Win 10, Win 7, Win 11.
Я отображаю окно путем получения позиции мыши на экране, при этом чучуть сдвигаю его. Для того чтобы узнать положение панели задач я использую WinApi(потомучто если панель задач автоматически скрывается то определить его по рабочей области экрана не получится). Быть может окно не отображается и висит на панели задач из за каких либо системных настроек или ошибки определения положения мыши на экране.
Закрываться оно само и должно, когда с него спадает флаг Activated, поэтому когда кликаете на любой другой элемент оно пропадает.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В Дизайнере XAML много разных предупреждений о кривых ссылках:
Я очень не люблю когда мне студия что то подсвечивает, поэтому сразу бы исправил)
Но проблема в том что у меня студия не показывает ошибок связанных с XAML, в рантайме тоже все ок.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Оно может в рантайм и работает, но дизайнер его не види.
Опять же у меня дизайнер все видит и не подсвечивает ошибки. Причем пробовал удалять и заново скачивать репозиторий, всеравно после первого запуска никаких ошибок связанных с XAML не отображается.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.10.2021, 23:10
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Какое у вас разрешение экрана?
Основной 1680х1050
Второй 1980х1080

Цитата Сообщение от xr_Sanya Посмотреть сообщение
Причем пробовал удалять и заново скачивать репозиторий, всеравно после первого запуска никаких ошибок связанных с XAML не отображается.
Удали и заново клонировал.
Ошибки в Дизайнере исчезли.

Но ошибки райнтайма остались все те же.
Кроме то, появился ещё ужасный баг: после запуска на исполнение меняется цветовая схема мониторов на тёплую.
Как будто через жёлтые очки на монитор смотришь.

После завершения работы приложения цветовая схема не возвращается.
Надо нолазить в настройках чтобы попробовать её вернуть.

Добавлено через 4 минуты
Для восстановления схемы пришлось выйти из сеанса пользователя Windows из зайти заново.
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
14.10.2021, 00:54  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Кроме то, появился ещё ужасный баг: после запуска на исполнение меняется цветовая схема мониторов на тёплую.
Предположительно поправил в коммите 74230a1
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для восстановления схемы пришлось выйти из сеанса пользователя Windows из зайти заново.
Не обязательно было делать, можно ползунок ночной цветовой температуры покрутить было покрутить для монитора)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
14.10.2021, 01:20
Цитата Сообщение от xr_Sanya Посмотреть сообщение
можно ползунок ночной цветовой температуры покрутить было покрутить для монитора)
Нужно было проверить эта схема сохраняется или временное смещение.

Добавлено через 4 минуты
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Предположительно поправил в коммите 74230a1
Перестало запускаться.
Выкидывает исключение System.FormatException: "Входная строка имела неверный формат."
здесь на 24 строке:
C#
19
20
21
22
23
24
25
        public static T GetValue<T>(string section, string key, string defaultValue) where T : IConvertible
        {
            StringBuilder buffer = new(MaxStringSize);
            Native.GetPrivateProfileString(section, key, defaultValue, buffer, MaxStringSize, Path);
 
            return (T)Convert.ChangeType(buffer.ToString(), typeof(T));
        }
Добавлено через 2 минуты
buffer = "0.8"
T = Single

Добавлено через 6 минут
Похоже вы не учитываете культуру.
Если defaultValue поменять на "0,8" - исключение не появляется.

Добавлено через 8 минут
Если добавить культуру, то запускается без исключений:
C#
24
            return (T)Convert.ChangeType(buffer.ToString(), typeof(T), CultureInfo.InvariantCulture);
Схема сбивается также.
Вернуть через настройки не получается.
Приходится выходиь-заходить.
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
14.10.2021, 05:06  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Нужно было проверить эта схема сохраняется или временное смещение.
Я в последних коммитах сделал логирование всего и вся, также нашел проблему из за которой не удавалось найти положение панели задач. Попробуйте потыкать по приложению, потом посмотреть файл лога или скиньте его в тему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.10.2021, 05:06

Взаимодействие кнопки из стиля с окном
Привет всем, у меня есть программа со своим стилем окна: http://***********/bbbf9b6a.png Так вот, кнопка Authorization Должна отвечать...

Как создать свойство для стиля кнопки?
Я хочу создать свойство для стиля кнопки, чтобы появилось новое свойство в окне свойств, как в WinForms. Как это сделать? Гуглил, но ничего...

Исключение при попытке изменения стиля кнопки
Не могу исправить ошибку при построении приложения, помогите пожалуйста.

Можно ли где посмотреть исходный код стиля кнопки
Можно ли где посмотреть исходный стиль кнопки?)

Изменение стиля кнопки
Всем привет. Подскажите, пожалуйста, как решить вот такую проблему: Сделал программу в ней 70 разных компонентов и все в стандартном стиле....


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru