Проблема масштабирования WPF - PullRequest
0 голосов
/ 19 августа 2010

У меня возникла проблема с использованием ScaleTransform.У меня есть Сетка с фиксированной шириной и высотой.Сетка содержит один дочерний элемент, прямоугольник.Заполнение прямоугольника - это VisualBrush, визуальный элемент которого привязывается к холсту вне сетки, размеры которого довольно велики.На прямоугольнике я использую ScaleTransform, где ScaleX и ScaleY оба установлены на 0,18.По сути, я пытаюсь уменьшить визуальный элемент прямоугольника, чтобы он соответствовал моей сетке.Кажется, что происходит то, что сама Сетка сокращается, что приводит к гораздо меньшему результату, чем я хочу.Я включил код ниже.Точно так же, как точка отсчета, высота и ширина, которые делает прямоугольник, по существу составляют 900 на 600, соответственно.Будем весьма благодарны за любые указания относительно того, что я могу делать неправильно.

<Grid Height="225" Width="200" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="PART_Content">
            <Rectangle Height="{Binding Path=ActualHeight}" Width="{Binding Path=ActualWidth}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Rectangle.Fill>
                    <VisualBrush Visual="{Binding}"/>
                </Rectangle.Fill>
                <Rectangle.RenderTransform>
                    <ScaleTransform ScaleX="0.183" ScaleY="0.183"/>
                </Rectangle.RenderTransform>
            </Rectangle>
        </Grid>

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

Что такое ActualWidth и ActualHeight? Если я не ошибаюсь, свойства ActualHeight и ActualWidth, так как они обычно означают в WPF , не являются DP, и вы не можете привязать их . Как было указано ниже, это свойства зависимости только для чтения. Предполагая, что это в стиле CustomControl, Binding должен быть сначала изменен на TemplateBinding.

Я удалил привязки и по сути создал статическую версию вашего XAML, которая выглядит просто отлично. Поскольку у вас есть Part_Content, определенный для сетки, мне интересно, является ли это xaml частью пользовательского стиля элемента управления? Код CustomControl управляет сеткой через PART_Content?

<Grid Height="225" Width="200" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="PART_Content" Background="Red">
<Rectangle  Height="225" 
            Width="200" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"
            Fill="Blue">

            <Rectangle.RenderTransform>
                <ScaleTransform ScaleX="0.183" ScaleY="0.183"/>
            </Rectangle.RenderTransform>
        </Rectangle>
    </Grid>
0 голосов
/ 19 августа 2010

Можете ли вы опубликовать XAML для элемента Canvas? Я попробовал следующее, и я получаю поведение, которое вы собираетесь (прямоугольник масштабируется и сетка имеет правильный размер)

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Grid ShowGridLines="True"  Height="225" Width="200" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="PART_Content">
            <Rectangle Height="{Binding Path=ActualHeight}" Width="{Binding Path=ActualWidth}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Rectangle.Fill>
                    <VisualBrush Visual="{Binding ElementName=theCanvas}"/>
                </Rectangle.Fill>
                <Rectangle.RenderTransform>
                    <ScaleTransform ScaleX="0.183" ScaleY="0.183"/>
                </Rectangle.RenderTransform>
            </Rectangle>
        </Grid>

        <Canvas x:Name="theCanvas" Grid.Row="1">
            <Rectangle Fill="Brown" Height="300" Width="300" />

        </Canvas>
    </Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...