3

以下のように実装された単純なUserControlがあります-これをCanvasに配置します。マルチタッチを使用して移動し、手続き型C#コードを使用して新しいX、Y位置を読み取れるようにしたい。理想的には、XとYを2つのプロパティまたはポイント(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から、バインディングまたは何らかの形式のアタッチされたプロパティ、あるいはまったく別のものを使用してそれらを埋めることができると期待していました。

しかし、解決策を探すのにかなりの時間を費やしたにもかかわらず、私がこれまでに見つけたものはすべて「必要なものではない」ようです。

この問題を解決するために私が何をすることを提案しますか?

4

2 に答える 2

1

さて、これが私がYを取得するために持っているサンプルコードです、あなたはこれがあなたが必要とするものであることをXが望んでいることを理解することができます:

Point current = e.GetPosition(MyControl as UIElement); //where your control is
Point top = e.GetPosition(Canvas as UIElement); //or maybe just the height of the canvas
Thickness margin = new Thickness();
margin.Top = top.Y - current.Y; //distance from the top
MyControl.Margin = margin;
于 2011-02-18T11:32:41.713 に答える
1

この権限があるかどうかを確認させてください。ユーザー コントロールの新しいインスタンスを作成し、それをキャンバスに追加しますか? 次に、マルチタッチを使用してそれを移動し (これを行う方法は? ビヘイビアを介して、または手動で?)、いつでもキャンバスに対するユーザー コントロールのインスタンスの新しい X/Y 位置を読み取りたいですか?

タッチで動かしたときに変更されているのと同じものを読むことができないのはなぜですか? RenderTransform プロパティを見たことがありますか?これは、動作または手動調整を使用して何かを操作するときに通常変更されるものです。

于 2011-02-18T10:12:20.297 に答える