Понадобилось "вживить" в стандартный ScrollViewer несколько контролов, благодаря которым пользователь мог бы менять коэффициенты масштабирования по горизонтали и вертикали.
Первое что пришло в голову — это изменение свойства Template в стиле для ScrollViewer:
<Style x:Key="CustomScrollViewer" TargetType="{x:Type ScrollViewer}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<!-- добавляем элементы из которых состоит ScrollViewer-->
<Grid>
...
<ScrollBar x:Name="PART_VerticalScrollBar" ... >
<!--добавляем кнопки "+" "-", а так же Slider, для изменения масштаба по вертикали-->
<StackPanel VerticalAlignment="Bottom" Width="17" Height="131" Grid.Row="0" Grid.Column="1" Orientation="Vertical">
<Button x:Name="vert_plus_btn" Content="+" Height="18" Width="17" Padding="0,-2,0,0"/>
<Slider x:Name="vert_slider" Style="{StaticResource sl}" Orientation="Vertical" Height="95" .../>
<Button x:Name="vert_minus_btn" Content="-" Height="18" Width="17" Padding="0,-2,0,0"/>
</StackPanel>
...
В результате при нажатии на кнопки
vert_plus_btn("+"),
vert_minus_btn("-") или при перемещении slider'а
vert_slider — масштаб должен изменяться.
Вопрос: как можно получить ссылку на объект
vert_slider в cs файле реализации(С#), чтобы изменять его свойство
vert_slider.Value при каждом новом нажатии на
"+" или
"-"? Или же подход иной?)
Спасибо.0,-2,0,0
Здравствуйте, j0ey, Вы писали:
J>Понадобилось "вживить" в стандартный ScrollViewer несколько контролов, благодаря которым пользователь мог бы менять коэффициенты масштабирования по горизонтали и вертикали.
J>Первое что пришло в голову — это изменение свойства Template в стиле для ScrollViewer:
J>J><Style x:Key="CustomScrollViewer" TargetType="{x:Type ScrollViewer}">
J> <Setter Property="OverridesDefaultStyle" Value="True"/>
J> <Setter Property="Template">
J> <Setter.Value>
J> <ControlTemplate TargetType="{x:Type ScrollViewer}">
J> <!-- добавляем элементы из которых состоит ScrollViewer-->
J> <Grid>
J> ...
J> <ScrollBar x:Name="PART_VerticalScrollBar" ... >
J> <!--добавляем кнопки "+" "-", а так же Slider, для изменения масштаба по вертикали-->
J> <StackPanel VerticalAlignment="Bottom" Width="17" Height="131" Grid.Row="0" Grid.Column="1" Orientation="Vertical">
J> <Button x:Name="vert_plus_btn" Content="+" Height="18" Width="17" Padding="0,-2,0,0"/>
J> <Slider x:Name="vert_slider" Style="{StaticResource sl}" Orientation="Vertical" Height="95" .../>
J> <Button x:Name="vert_minus_btn" Content="-" Height="18" Width="17" Padding="0,-2,0,0"/>
J> </StackPanel>
J> ...
J>
J>В результате при нажатии на кнопки vert_plus_btn("+"), vert_minus_btn("-") или при перемещении slider'а vert_slider — масштаб должен изменяться.
J>Вопрос: как можно получить ссылку на объект vert_slider в cs файле реализации(С#), чтобы изменять его свойство vert_slider.Value при каждом новом нажатии на "+" или "-"? Или же подход иной?)
J>Спасибо.0,-2,0,0
Можно поискать по шаблону с помощью функции FindName после вызова ApplyTemplate
...
myScollViewer.ApplyTemplate();
Button btn = myScollViewer.Template.FindName("vert_plus_btn", myScollViewer) as Button;
...
Но вообще лучше так не делать, а унаследоваться от ScrollViewer и создать команды для нужных кнопок
Здравствуйте, j0ey, Вы писали:
J>В результате при нажатии на кнопки vert_plus_btn("+"), vert_minus_btn("-") или при перемещении slider'а vert_slider — масштаб должен изменяться.
J>Вопрос: как можно получить ссылку на объект vert_slider в cs файле реализации(С#), чтобы изменять его свойство vert_slider.Value при каждом новом нажатии на "+" или "-"? Или же подход иной?)
Иной. Slider поддерживает команды изменения значения. Например,
IncreaseSmall. Button предоставляет свойства
Command и
CommandTarget. Пользуйся
Здравствуйте, j0ey, Вы писали:
J>всем спасибо!)
Для спасибо есть оценочка в правом верхнем углу