Как получить X, Y позицию UserControl в Canvas - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть простой UserControl, как показано ниже - я помещаю его в Canvas.Я перемещаю его, используя Multi-touch, и хочу иметь возможность читать его новое положение X, Y, используя процедурный код C #.В идеале я хотел бы иметь X и Y как два свойства или как точку (X, Y).

<UserControl x:Class="TouchControlLibrary.myControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="64" d:DesignWidth="104">
    <Border Name="ControlBorder" BorderThickness="1" BorderBrush="Black">
        <DockPanel Margin="1" Height="60 " Width="100">
            <StackPanel  DockPanel.Dock="Left" Background="Gray"  Width="20" >
                <Button Background="#FFDEDE53" Padding="0">In</Button>
            </StackPanel>
            <StackPanel  DockPanel.Dock="Right" Background="Gray"  Width="20" >
                <Button Background="#FFE8B48F" Padding="0">Out</Button>
            </StackPanel>
        </DockPanel>  
    </Border>
</UserControl>

Я ожидал создать прикрепленное свойство для каждого из 'X' и 'Y' и заполнитьих из Canvas.Left и Canvas.Top, используя привязку или некоторую форму присоединенного свойства или ???.Я потратил довольно много времени на поиск решения, но все, что я нахожу, кажется «не совсем то, что нужно».

1 Ответ

2 голосов
/ 18 февраля 2011

Вы можете использовать два таких свойства в вашем userControl,

    public double Top
    {
        get
        {
            if (double.IsNaN(Canvas.GetTop(this)))
            {
                return (double)0;
            }
            return Canvas.GetTop(this);
        }

        set
        {
            Canvas.SetTop(this, value);
        }
    }

Проверка «NotANumber» на самом деле не нужна, но я использую ее для предотвращения ошибок.

...