Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 23:33   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,386
По умолчанию WPF и Silverlight: Как вернуть TextBlock в исходную позицию?

Дорогие форумчане, как можно вернуть TextBlock в исходную позицию, если мы его перетащили, используя RenderTransform и ManipulationDelta во внутрь прямоугольника? Дело в том, что если я после ManipulationDelta задаю Canvas.SetLeft/SetTop для TextBlock, и практика показывает что метод уже будет брать за точку отчета (0 0) текущую позицию TextBlock, и значит, присваивание элементу начальных значений координат на Canvas (скажем, 50 50), не только не вернет его в начальную позицию, но и сдвинет соответственно еще на 50 пикселей от текущего положения.

Или же получается, что после перемещения во внутрь прямоугольника уже Rectangle становится оберткой для TextBlock, а не Canvas?

XAML
Код:
 <Canvas>
        <TextBlock Height="23"  Name="textBlock1" Text="TextBlock" Canvas.Left="50" Canvas.Top="50" ManipulationStarted="textBlock1_ManipulationStarted">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="transform" ></TranslateTransform>
            </TextBlock.RenderTransform>
            </TextBlock>
            <Rectangle Canvas.Left="192" Canvas.Top="120" Height="100" Name="rectangle1" Stroke="Black" Width="100" />
            <Button Canvas.Left="350" Canvas.Top="66" Content="Button" Height="46" Name="button1" Width="94" Click="button1_Click" />
            <TextBox Canvas.Left="208" Canvas.Top="29" Height="23" Name="BoxAxis" Width="120" />
            <Button Canvas.Left="49" Canvas.Top="89" Content="Return" Height="23" Name="button2" Width="75" Click="button2_Click" />
        </Canvas>
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 27.06.2013, 02:04   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Рискну предположить, что после перетаскивания изменились X и Y в TranslateTransform, которые, собственно, и переместили текстблок, и восстанавливать необходимо именно их, а не Canvas.Left и Canvas.Top

Цитата:
и практика показывает что метод уже будет брать за точку отчета (0 0) текущую позицию TextBlock
Это не так, точка отсчета совпадает с левым верхним углом Canvas. Координаты не совпадают по другим причинам (см. выше)

Цитата:
после перемещения во внутрь прямоугольника уже Rectangle становится оберткой для TextBlock, а не Canvas
тоже нет (если конечно это специально не сделано в коде)

Еще рекомендую использовать SilverlightSpy или WpfInspector в качестве хорошего инструмента для отслеживания/изменения свойств объектов, хорошо помогает в отладке
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 27.06.2013 в 02:06.
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форматирования числа для TextBlock xil WPF, UWP, WinRT, XAML 4 17.04.2012 17:26
[Silverlight] Как реализовать массив эллипсов? Java WPF, UWP, WinRT, XAML 0 13.12.2011 00:07
TextBlock в ListBox _Николай_ WPF, UWP, WinRT, XAML 0 21.04.2011 00:24
Как подключить .NET библиотеку к Silverlight? Mindzor WPF, UWP, WinRT, XAML 0 05.03.2011 21:45