Вытащил LayoutTransformer из Silverlight Toolkit - ведет себя странно

Справочная информация: Короче говоря, наша компания в настоящее время использует как инструменты Telerik Silverlight, так и Silverlight Toolkit для достижения того, что нам нужно в нашей программе. Поскольку Silverlight вымирает, а Silverlight Toolkit не обновлялся с 2011 года, мы удаляем все зависимости в Silverlight Toolkit и пытаемся заменить эти элементы управления альтернативой Telerik, чтобы мы не использовали оба набора инструментов. Таким образом, нашим клиентам нужно всего лишь загрузить файл 5 МБ, а не 10 МБ.

Так как Telerik не было альтернативы LayoutTransformer, я решил просто извлечь код из исходного кода и поместить его в наш проект. После извлечения исходного файла из набора инструментов, размещения его в моем проекте и последующего обновления всех ссылок у меня возникает небольшая проблема.

Предполагается, что рассматриваемый экран выглядит следующим образом: хорошо

Но это выглядит так после изменения: плохой


Единственное, что я изменил, было

<UserControl
   ...
   xmlns:layoutToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit">

к

<UserControl
   ...
   xmlns:layoutToolkit="clr-namespace:Company.MyApp.App.Controls.LayoutTransformer">

сделать контрольную ссылку на код, который я вытащил вместо кода из сборки.


Похоже, что Grid, в котором хранится вся эта информация, не автоматически масштабируется, а вместо этого вся информация просто защемляется в этой маленькой области (хотя ни один из этого кода не изменился)


Кто-нибудь знает, что может быть причиной того, что новый LayoutTransformer ведет себя так, даже если весь код технически одинаков? Я получаю что-то не так при извлечении кода из набора инструментов и размещении его в моем проекте? Я пытался зафиксировать только соответствующую информацию, но если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо!

2 ответа

Решение

Не удалось заставить LayoutTransformer работать независимо от того, что я сделал, поэтому я просто переключил его на RenderTransform. Из-за этого изменения у меня возникла проблема, заключающаяся в том, что ScrollViewer не изменял полосы прокрутки в соответствии с шириной StackPanel, когда я увеличивал / уменьшал масштаб (причина, по которой мы в первую очередь использовали LayoutTransform, заключается в том, что он будет делать это автоматически для вы). Чтобы исправить это, я нашел обходной путь, обернув StackPanel (которая преобразуется) в Canvas. Затем, когда StackPanel трансформируется, я устанавливаю размер холста. Вот код ниже для тех, кому это может понадобиться в будущем.

XAML:

                <ScrollViewer
                    x:Name="PageScrollViewer"
                    HorizontalScrollBarVisibility="Auto"
                    VerticalScrollBarVisibility="Auto"
                    Background="#404040">
                    <Canvas x:Name="DocumentPanelHolder" UseLayoutRounding="False">
                        <StackPanel x:Name="DocumentPanel" Orientation="Vertical"/>
                    </Canvas>
                </ScrollViewer>

C#: // Внутри встроенной функции масштабирования.

            ScaleTransform st = new ScaleTransform();
            st.ScaleX = newZoomValue;
            st.ScaleY = newZoomValue;
            this.DocumentPanel.RenderTransform = st;
            this.DocumentPanel.UpdateLayout();
            this.DocumentPanelHolder.Height = this.DocumentPanel.ActualHeight * newZoomValue;
            this.DocumentPanelHolder.Width = this.DocumentPanel.ActualWidth * newZoomValue;

Я предполагаю, что вам также нужно скопировать XAML для стиля управления в ресурсы вашего приложения.

<Style TargetType="layoutToolkit:LayoutTransformer">
    <Setter Property="Foreground" Value="#FF000000"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="layoutToolkit:LayoutTransformer">
                <Grid x:Name="TransformRoot" Background="{TemplateBinding Background}">
                    <ContentPresenter
                        x:Name="Presenter"
                        Content="{TemplateBinding Content}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Другие вопросы по тегам