UWP ListView ScrollViewer - сбросить масштаб (фактор) - PullRequest
0 голосов
/ 28 августа 2018

Мой ListView содержит BitmapImages, и я хочу разрешить увеличение этих изображений.

Если я пойду ScrollViewer. ... Я не получу коэффициенты зомминга.

<UserControl
x:Class="SimplePdfViewer.SimplePdfViewerControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SimplePdfViewer"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Unloaded="root_Unloaded"
x:Name="root">
<UserControl.Resources>
    <Style TargetType="ListViewItem" x:Key="ListViewItemEdit">
        <!-- spacing between pages-->
        <Setter Property="Margin" Value="0 0 0 3"/>
        <!-- Setting Background Color of PDf Placeholders to White-->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <ListViewItemPresenter ContentTransitions="{TemplateBinding ContentTransitions}"
                                PlaceholderBackground="White"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid>
    <ListView x:Name="PdfListView"
              ItemsSource="{x:Bind DocumentDataSource}"
              ScrollViewer.ZoomMode="Enabled" 
              ItemContainerStyle="{StaticResource ListViewItemEdit}"
              SelectionMode="None">

        <ListView.ItemTemplate>
            <!-- Implement Dynamic Width! -> Added for Placeholder Width -->
            <DataTemplate x:DataType="BitmapImage">
                <ListViewItem 
                    Height="1180"
                    Width="800"
                    Background="White"
                    IsHitTestVisible="False">
                    <Image Source="{x:Bind}"/>
                </ListViewItem>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

Есть ли способ сбросить увеличенное изображение до исходного размера?

спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Да, и как ответ @ user1419778, вы должны найти объект ScrollViewer из ListView, затем вы можете использовать ScrollViewer.ChangeView Метод zoomFactor метода для сброса его ZoomFactor .

Во-первых, вы можете найти объект ScrollViewer из ListView, используя следующий метод в классе помощника.

public static class UIHelper
{
    public static ChildElement FindVisualChild<ChildElement>(this DependencyObject obj)
        where ChildElement : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            if (child != null && child is ChildElement)
                return (ChildElement)child;
            else
            {
                ChildElement childOfChild = FindVisualChild<ChildElement>(child);
                if (childOfChild != null)
                    return childOfChild;
            }
        }
        return null;
    }
}

Затем вы можете получить объект ScrollViewer и сбросить его ZoomFactor в коде вашего UserControl.

private void ResetButton_Click(object sender, RoutedEventArgs e)
{
    var scrollViewer=PdfListView.FindVisualChild<ScrollViewer>();
    //change view to vertical offset and set the zoom factor to 1.
    //The default zoom factor is 1.0, where 1.0 indicates no additional scaling
    scrollViewer.ChangeView(0, scrollViewer.VerticalOffset, 1.0f);
}
0 голосов
/ 30 августа 2018

Если вы получаете ручку от средства просмотра прокрутки, вы можете использовать ScrollViewer.ChangeView(), чтобы установить, насколько увеличено изображение на вашем изображении.

...