WPF: Как мне получить доступ к визуализированным измерениям Path в XAML? - PullRequest
1 голос
/ 15 сентября 2010

Я пытаюсь наложить текстовое содержимое поверх области, описанной Path.Path находится в ViewBox обернутом Canvas, так что он может масштабироваться до любого размера.TextBlock находится в Canvas упакованной сетке, которая пытается использовать измерения Path для определения расположения текстового блока.

<?xml version="1.0" encoding="UTF-8"?>
<Canvas
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Width="1299" Height="413">
    <ContentControl Width="300" Height="Auto">
        <Grid>
            <Viewbox Stretch="Uniform" x:Name="MyViewBox">
                <Canvas Width="121.664" Height="79.158" x:Name="MyCanvas">
                    <Canvas.LayoutTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="1" ScaleY="1"/>
                        </TransformGroup>
                    </Canvas.LayoutTransform>
                    <Path x:Name="MyPath" Width="115.666" Height="54.334" Canvas.Left="2.998" Canvas.Top="3.086" Data="M 115.666015,46.333496 C 115.666015,50.733887 112.066406,54.333985 107.666015,54.333985 L 7.99999999999994,54.333985 C 3.59960900000004,54.333985 0,50.733887 0,46.333496 L 0,8 C 0,3.60058600000002 3.59960900000004,0 7.99999999999994,0 L 107.666015,0 C 112.066406,0 115.666015,3.60058600000002 115.666015,8 L 115.666015,46.333496 Z">
                        <Path.Fill>
                            <SolidColorBrush Color="Red"/>
                        </Path.Fill>
                    </Path>
                </Canvas>
            </Viewbox>
            <Canvas>
                <Grid Width="115.666" Height="54.334" Canvas.Left="2.998" Canvas.Top="3.086" Margin="10,10">
                    <Thumb/>
                    <TextBlock TextWrapping="Wrap">
                    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
                    </TextBlock>
                </Grid>
            </Canvas>
        </Grid>
    </ContentControl>
</Canvas>

Возникают две проблемы.Во-первых, Сетка использует объявленные измерения пути, а не окончательные визуализированные измерения.Кроме того, если я установлю ScaleTransform.ScaleY на «-1» на холсте пути (для зеркального отражения пути по вертикали), TextBlock не переместится на новые позиции моего пути.это в XAML, или мне придется использовать выделенный код для чтения местоположения во время выполнения?

РЕДАКТИРОВАТЬ: пример Grid на самом деле не ссылается на свойства пути, так как я не смог выяснить правильные свойствассылка.

1 Ответ

0 голосов
/ 15 сентября 2010

Вы можете привязать к Path ActualWidth и ActualHeight, как показано ниже:

"{Binding ElementName=MyPath, Path=ActualHeight}"

HTH

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