Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Увеличить картинку через Slider

13.05.2019, 12:49. Показов 10333. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть слайдер в словаре

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<Style TargetType="Slider" x:Key="Style.Slider.Scale">
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="Maximum" Value="2"/>
        <Setter Property="Minimum" Value=".15"/>
        <Setter Property="IsMoveToPointEnabled" Value="True"/>
        <Setter Property="TickPlacement" Value="BottomRight"/>
        <Setter Property="TickFrequency" Value="2"/>
        <Setter Property="Ticks" Value=".5, 1, 1.5, 2, 2.5, 3, 3.5, 4.5, 5, 5.5, 6, 7"/>
        <Setter Property="Width" Value="200"/>
        <Setter Property="Margin" Value="20"/>
        <Setter Property="SelectionStart" Value="1"/>
        <Setter Property="IsSnapToTickEnabled" Value="True"/>
    </Style>
XML
1
2
3
4
5
<Slider 
                            Name="sld"
                            Grid.Row="1"
                            Style="{StaticResource Style.Slider.Scale}"
                            ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Value}"/>
привязываю к картинке чтобы менялся размер
XML
1
2
 <Image Width="{Binding ElementName=sld, Path=Value}"
                                           Height="{Binding ElementName=sld, Path=Value}"/>
Но вместо это изначально становится крошечная картинка и не значительно увеличивается. Я менял параметры Ticks, но эффекта никакого нет.

Добавлено через 6 минут
А, я понял max/min не правильно указал, но задается в пикселях, можно как-то менять размер не пикселями, а масштаб?

Добавлено через 2 минуты
Странно, не увеличивает правильно всё равно, какие бы значения не задавал...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2019, 12:49
Ответы с готовыми решениями:

Управление свойством через Slider
Всем привет! Как управлять свойством через Slider, например прозрачностью? Через VB? Спасибо

Почему smart slider 3 выводит картинку в полный размер а мои размеры игнорирует?
Создал тестовый сайт и залил картинки.Думал сделаю хороший слайдер. Устал я от этого слайдера. Пробовал metaslider так в нем половина...

Увеличить картинку
Всем привет. В общем есть код, но я не знаю как его доработать чтобы при нажатии на кнопку Fractal, потом Zoom далее выделение области и...

28
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
15.05.2019, 14:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ShmelVG Посмотреть сообщение
Увеличить картинку через Slider
Цитата Сообщение от Элд Хасп Посмотреть сообщение
По сути, если брать именно масштабирование, то должен увеличиваться сам ХОЛСТ с элементами на нём. То есть увеличиваются размеры холста, размеры фото, значения позиций. Как это сделать, корректно, через ScaleTransform я не нашёл. Это был бы самый лучший вариант, но как его реализовать я не знаю.
Придумал как сделать МАСШТАБИРОВАНИЕ холста только внутри View.
Нужен конвертер для математических операций:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
namespace CommLibrary
{
    /// <summary>Перечислитель допустимых математических действий</summary>
    public enum MathEnum
    {
        /// <summary>Нет операции</summary>
        None = 0,
        /// <summary>Сложение</summary>
        Add = 1,
        /// <summary>Вычитание</summary>
        Subtr = 2,
        /// <summary>Умножение</summary>
        Mult = 3,
        /// <summary>Деление</summary>
        Div = 4
    }
 
    public class MathMultiConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values == null || values.Length == 0)
                return null;
            double? a, b;
            if (double.TryParse(values[0].ToString(), out double val))
                a = val;
            else
                return null;
 
            if (values.Length > 1 && double.TryParse(values[1].ToString(), out val))
                b = val;
            else
                b = null;
 
            if (parameter == null || !Enum.TryParse(parameter.ToString(), out MathEnum mathAction))
                return null;
            switch (mathAction)
            {
                case MathEnum.Add:
                    if (b == null)
                        throw new ArithmeticException();
                    else
                        return (double)(a + b);
                case MathEnum.Subtr:
                    if (b == null)
                        throw new ArithmeticException();
                    else
                        return (double)(a - b);
                case MathEnum.Mult:
                    if (b == null)
                        throw new ArithmeticException();
                    else
                        return (double)(a * b);
                case MathEnum.Div:
                    if (b == null || b == 0)
                        throw new ArithmeticException();
                    else
                        return (double)(a / b);
                default: return (double)a;
            }
        }
 
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            => throw new NotImplementedException();
    }
}
Объявить этот конвертер в View - я это сделал в словаре
XML
1
    <commlibrary:MathMultiConverter x:Key="MathMultiConverter"/>
В самой View завернуть Border с Canvas в ViewBox и убрать в Slider привязку к VM
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
<Window x:Class="PhotoGluer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        xmlns:commlibrary="clr-namespace:CommLibrary;assembly=CommLibrary"
        Title="PhotoGluer" Height="800" Width="1200"
        xmlns:viewModels="clr-namespace:PhotoGluer.ViewModels">
    <!--d:DataContext="{x:Type viewModels:IPhotoGluer}"-->
 
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="PhotoGluerDict.xaml"/>
                <ResourceDictionary Source="ViewModelDataDesignedDict.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Window.DataContext>
        <Binding Mode="OneWay" Source="{StaticResource ViewModel.DD}"/>
    </Window.DataContext>
 
    <Grid>
        <Border 
            BorderBrush="Gray"
            BorderThickness="7">
 
            <Grid>
 
                <Grid.ColumnDefinitions>
                    <ColumnDefinition></ColumnDefinition>
                    <ColumnDefinition Width="0.3*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Border BorderBrush="Black"
                        BorderThickness="3"
                        Margin="5">
 
                    <ScrollViewer
                            HorizontalScrollBarVisibility="Auto"
                            VerticalScrollBarVisibility="Auto">
                        <Viewbox>
                            <Viewbox.Width>
                                <MultiBinding Converter="{StaticResource MathMultiConverter}" ConverterParameter="{x:Static commlibrary:MathEnum.Mult}">
                                    <Binding ElementName="borderCanvas" Path="ActuaWidthl"/>
                                    <Binding Path="Value" ElementName="slider"/>
                                </MultiBinding>
                            </Viewbox.Width>
                            <Viewbox.Height>
                                <MultiBinding Converter="{StaticResource MathMultiConverter}" ConverterParameter="{x:Static commlibrary:MathEnum.Mult}">
                                    <Binding ElementName="borderCanvas" Path="ActualHeight"/>
                                    <Binding Path="Value" ElementName="slider"/>
                                </MultiBinding>
                            </Viewbox.Height>
                            <Border x:Name="borderCanvas" BorderBrush="Green" BorderThickness="1" VerticalAlignment="Center" HorizontalAlignment="Center">
                                <Canvas x:Name="canvas" Width="{Binding Width}" Height="{Binding Height}"
                                    MinWidth="400" MinHeight="300"
                                    Background="{StaticResource DrawingBrush.Chessboard}" RenderTransformOrigin="0.5,0.5">
                                    <Canvas.Resources>
                                        <Style TargetType="Border" BasedOn="{StaticResource Style.Border.Canvas}">
                                            <EventSetter Event="MouseUp"  Handler="Label_MouseUp"/>
                                        </Style>
                                        <Style TargetType="Image" BasedOn="{StaticResource Style.Image.Canvas}"/>
                                    </Canvas.Resources>
                                    <Border DataContext="{Binding FirstImage, Mode=OneWay}">
                                        <Image/>
                                    </Border>
                                    <Border DataContext="{Binding SecondImage, Mode=OneWay}">
                                        <Image/>
                                    </Border>
                                </Canvas>
                            </Border>
                        </Viewbox>
                    </ScrollViewer>
 
                </Border>
 
                <Grid Grid.Column="1">
 
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
 
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
 
                        <Grid.RowDefinitions>
                            <RowDefinition Height="0.5*"/>
                            <RowDefinition Height="0.5*"/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <TextBlock  Grid.ColumnSpan="2"
                                    Grid.Row="1" 
                                    Text="Смещение X,Y" 
                                    FontSize="18"
                                    Style="{StaticResource Style.TextBlock.Offset}"/>
 
                        <Button Grid.Row="2" 
                                Content="Фото 1"
                                CommandParameter="{Binding FirstImage}"
                                Style="{StaticResource Style.Button.LoadImage}"/>
                        <Button Grid.Row="3" 
                                Content="Фото 2"
                                CommandParameter="{Binding SecondImage}"
                                Style="{StaticResource Style.Button.LoadImage}"/>
 
                        <Label Style="{StaticResource Style.Label.Offset}" 
                               Content="{Binding FirstImage.Position, Mode=OneWay}"
                               Grid.Column="1" Grid.Row="2"/>
                        <Label Style="{StaticResource Style.Label.Offset}" 
                               Content="{Binding SecondImage.Position, Mode=OneWay}"
                               Grid.Column="1" Grid.Row="3"/>
                        <Label Style="{StaticResource Style.Label.Offset}" 
                               Content="{Binding Offset, Mode=OneWay}"
                               Grid.Column="1" Grid.Row="4"/>
 
                        <TextBlock Style="{StaticResource Style.TextBlock.Offset}"
                                   Grid.Row="4" 
                                   Text="Относительное:" 
                                   FontSize="18"/>
                    </Grid>
                    <Grid Grid.Row="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
 
                        <Grid.RowDefinitions>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                        </Grid.RowDefinitions>
 
                        <TextBlock 
                                Grid.ColumnSpan="2" 
                                Grid.Row="0" 
                                TextWrapping="Wrap" 
                                Text="Повернуть" 
                                VerticalAlignment="Center" 
                                HorizontalAlignment="Center"
                                FontSize="18"/>
 
                        <Button Grid.Column="0"
                                Grid.Row="1" 
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center" 
                                FontSize="12"
                                Command="{Binding RotateCommand}"
                                CommandParameter="-1">
                            <Grid>
                                <Image Source="/PhotoGluer;component/Resources/Стрелка поворота.png" RenderTransformOrigin="0.5,0.5">
                                    <Image.RenderTransform>
                                        <TransformGroup>
                                            <ScaleTransform ScaleY="1" ScaleX="-1"/>
                                            <TranslateTransform/>
                                        </TransformGroup>
                                    </Image.RenderTransform>
                                </Image>
                                <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,2,0,0">
                                    <Run Text="90"/><Run Text="°"/>
                                </TextBlock>
                            </Grid>
                        </Button>
 
                        <Button Grid.Row="1" 
                                Style="{StaticResource Style.Button.Rotate}"
                                Content="-1">
                        </Button>
 
                        <Button Grid.Row="2" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -10
                        </Button>
                        <Button Grid.Row="3" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -45
                        </Button>
                        <Button Grid.Row="4" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -90
                        </Button>
 
                        <Button 
                                Grid.Column="1"
                                Grid.Row="1" 
                                Style="{StaticResource Style.Button.Rotate}">
                            1
                        </Button>
 
                        <Button 
                                Grid.Column="1"
                                Grid.Row="2" 
                                Style="{StaticResource Style.Button.Rotate}">
                            10
                        </Button>
                        <Button 
                                Grid.Column="1"
                                Grid.Row="3" 
                                Style="{StaticResource Style.Button.Rotate}">
                            45
                        </Button>
                        <Button 
                                Grid.Column="1"
                                Grid.Row="4" 
                                Style="{StaticResource Style.Button.Rotate}">
                            90
                        </Button>
 
                    </Grid>
 
                    <Grid Grid.Row="2" Height="{Binding ActualWidth, Mode=OneWay, RelativeSource={RelativeSource Self}}" Margin="20,0">
 
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="2*"/>
                            <ColumnDefinition/>
                            <ColumnDefinition Width="2*"/>
                        </Grid.ColumnDefinitions>
 
                        <Grid.RowDefinitions>
                            <RowDefinition Height="2*"/>
                            <RowDefinition/>
                            <RowDefinition Height="2*"/>
                        </Grid.RowDefinitions>
 
                        <RepeatButton Grid.Column="1" 
                                Content="{x:Static viewModels:DirectionEnum.Up}"
                                Style="{StaticResource Style.RepeatButton.Move}"/>
                        <RepeatButton Grid.Row="1" 
                                Content="{x:Static viewModels:DirectionEnum.Left}"
                                Style="{StaticResource Style.RepeatButton.Move}"/>
                        <RepeatButton Grid.Column="2"
                                Grid.Row="1"
                                Content="{x:Static viewModels:DirectionEnum.Rigth}"
                                Style="{StaticResource Style.RepeatButton.Move}"/>
                        <RepeatButton Grid.Column="1" 
                                Grid.Row="2"
                                Content="{x:Static viewModels:DirectionEnum.Down}"
                                Style="{StaticResource Style.RepeatButton.Move}"/>
 
                    </Grid>
                    <StackPanel Grid.Row="3">
                        <TextBlock Text="Выбор изображения" HorizontalAlignment="Center"/>
                        <ToggleButton 
                                  IsChecked="{Binding IsSecondSelected}"
                                  Style="{StaticResource ToggleButton.Style}"
                                  Margin="10" IsEnabled="{Binding IsSelectedEnabled}"
                                  VerticalAlignment="Center"/>
                        <Slider x:Name="slider" Margin="5,10,5,0" 
                                Minimum="0.1" Maximum="10"
                                Value="1"/>
                    </StackPanel>
                </Grid>
 
            </Grid>
 
        </Border>
    </Grid>
 
</Window>
По-моему, красиво получилось.
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
15.05.2019, 15:00  [ТС]
Элд Хасп, спасибо! Чтобы тексбокс (лейбл или текстблок) выводил строковое значение достаточно в PhotoGluerVMDD объявить поле, и в св-ве в set присвоить нужное форматирование?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
15.05.2019, 15:03
Цитата Сообщение от ShmelVG Посмотреть сообщение
PhotoGluerVMDD объявить поле, и в св-ве в set присвоить нужное форматирование?
Да, только не поле, а свойство.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
15.05.2019, 16:54  [ТС]
Элд Хасп,
C#
1
private string _markup;
C#
1
public string Markup { get => _markup; set => _markup = "какой-то текст";  }
XML
1
2
3
4
5
6
7
8
9
10
11
<Grid>
                            <GroupBox Header="Код файла .config" Margin="5" Padding="5">
                                <ScrollViewer VerticalScrollBarVisibility="Auto">
                                    <TextBlock 
                                        x:Name="textBox" 
                                        TextWrapping="Wrap"
                                        Text="{Binding Markup, Mode=OneWay}">
                                    </TextBlock>
                                </ScrollViewer>
                            </GroupBox>
                        </Grid>
Не отображается(
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
15.05.2019, 18:31
ShmelVG, у меня компа под рукой дня два не будет.
На вскидку, в свойстве Markup нет поддержки INPC
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
20.05.2019, 17:04  [ТС]
Элд Хасп, я изначально сделал масштаб меньше, чтобы было видно часть картинки которая вылезает, её видно(конечно это не решает проблемы, думаю такой подход не верен, хоть и в выводе то, что надо), жаль что при увеличении масштаба, увеличивается именно сам канвас (что логично) и при увеличении "обрезается" этот кусок картинки который "не влез" в канвас(
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
20.05.2019, 19:28
Лучший ответ Сообщение было отмечено ShmelVG как решение

Решение

ShmelVG, создал конвертер
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
namespace CommLibrary
{
    public class OffsetToCenterMultiConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            int countParams = 3;
            if (values == null || values.Length < countParams)
                return null;
 
            double offset, sizeCanvas, sizeImage;
            if (double.TryParse(values[0].ToString(), out double valD))
                offset = valD;
            else
                return null;
            if (double.TryParse(values[1].ToString(), out valD))
                sizeCanvas = valD;
            else
                return null;
            if (double.TryParse(values[2].ToString(), out valD))
                sizeImage = valD;
            else
                return null;
            double res = offset + (sizeCanvas - sizeImage) / 2.0;
            return res;
        }
 
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            => throw new NotImplementedException();
    }
}
Внёс его в стиль
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
    <commlibrary:OffsetToCenterMultiConverter x:Key="OffsetToCenterMultiConverter"/>
    <Style TargetType="Border" x:Key="Style.Border.Canvas">
        <Setter Property="Canvas.Top">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource OffsetToCenterMultiConverter}" Mode="OneWay" ConverterParameter="Top">
                    <Binding Path="Position.Top" Mode="OneWay"/>
                    <Binding Path="ActualHeight" Mode="OneWay" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Canvas}}"/>
                    <Binding Path="ActualHeight" Mode="OneWay" RelativeSource="{RelativeSource Self}"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
        <Setter Property="Canvas.Left">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource OffsetToCenterMultiConverter}" Mode="OneWay" ConverterParameter="Left">
                    <Binding Path="Position.Left" Mode="OneWay"/>
                    <Binding Path="ActualWidth" Mode="OneWay" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Canvas}}"/>
                    <Binding Path="ActualWidth" Mode="OneWay" RelativeSource="{RelativeSource Self}"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
        <Setter Property="BorderBrush" Value="{x:Null}"/>
        <Setter Property="BorderThickness" Value="2"/>
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
        <Setter Property="RenderTransform">
            <Setter.Value>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform Angle="{Binding Position.Angle}"/>
                    <TranslateTransform/>
                </TransformGroup>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsSelected}" Value="true">
                <Setter Property="BorderBrush" Value="LightBlue"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
Ещё пришлось внести изменения в Model и ViewModel

Проект в текущем состоянии (для меня) прилагаю.
Вложения
Тип файла: 7z PhotoGluer v5.2.7z (336.3 Кб, 1 просмотров)
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
21.05.2019, 11:41  [ТС]
Элд Хасп, большое спасибо!!! Это идеальное решение)) Но есть вопросы, которые я не смог понять:
- в конвекторе int countParams = 3; - что означает? И в целом не очень понял работу конвектора, могли бы на пальцах рассказать?)
- Бордер конвектор получается больше не нужен?
- В словаре 2 раза определяется Path="ActualHeight", почему? Ведь уже привязан к одному контейнеру.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
21.05.2019, 12:10
Цитата Сообщение от ShmelVG Посмотреть сообщение
- в конвекторе int countParams = 3; - что означает?
Я его переделывал из универсально конвертера. countParams была переменная которая определяла сколько нужно передать параметров. В данном случае - это постоянное число. Но лучше оставьте как есть - если будете переделывать в какой-то другой, то понятно, что надо менять.
Цитата Сообщение от ShmelVG Посмотреть сообщение
И в целом не очень понял работу конвектора, могли бы на пальцах рассказать?)
Конвертер в первом параметре ожидает смещение относительно центров холста и изображения.
Во втором - размер холста
В третьем - размер изображения.
Возвращает - смещение относительно верхнего левого угла, так как такое смещение ожидают свойства Canvas.Top и Canvas.Left.
В теле конвертера большая часть это приведение параметров к double. Если хоть один не приводится, то конвертер возвращает null. Правильнее было бы бросать исключение, но сделал так
Само вычисление это одна строчка offset + (sizeCanvas - sizeImage) / 2.0 - из школьной математики.
Цитата Сообщение от ShmelVG Посмотреть сообщение
Бордер конвектор получается больше не нужен?
Да, не нужен. Этот конвертер включил в себя его функционал.
Но Вы не удаляйте конвертеры из библиотеки. Они очень мало занимаю места и ни чем не мешают. А саму библиотеку сможете использовать в каком-то другом решении, там может пригодиться.

Цитата Сообщение от ShmelVG Посмотреть сообщение
В словаре 2 раза определяется Path="ActualHeight", почему? Ведь уже привязан к одному контейнеру.
Одна привязка к размеру Canvas, вторая к самому себе - то есть к Border содержащему изображение. По другому пересчитать центральное смещение в угловое не получится.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2019, 12:10

Увеличить картинку в ширину
Есть картинка. &lt;body&gt; &lt;input type=&quot;button&quot; value=&quot;zoom&quot; onclick=&quot;zoom(3)&quot;&gt;&lt;/br&gt; &lt;img src=&quot;img/1.png&quot;...

Как правильно увеличить картинку
Ребят подскажите, у меня есть блок по высоте 210px, одни картинки по 180px, я их равномерно увеличиваю по высоте и ширине. Но некоторые...

Как увеличить картинку с сохранением качества?
Надо увеличить картинку так чтобы она не растягивалась а увеличивала размер пикселя.

Увеличить картинку в Excel с помощью Do...Loop
Доброго времени суток. Помогите пожалуйста! Имеется форма в excel на ней есть картинка и кнопка и нужно при помощи Do...Loop и...

Revolution Slider Error: Slider with alias main_slider not found
Уважаемые форумчане помогите пожалуйста! Поставил плагин Revolution Slider но он выводит ошибку на экране Revolution Slider Error:...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru