Вытащил 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>