在UWP中按用户拖动UI元素

时间:2018-06-19 18:45:42

标签: xaml uwp drag-and-drop uwp-xaml drag

我有一个包含TextBox的网格。我想用户可以在该网格中拖动文本框。我尝试过canDrag属性设置为True,但是它什么也没做。

<Grid AllowDrop="True">
    <TextBlock CanDrag="True"/>

</Grid>

2 个答案:

答案 0 :(得分:1)

CanDrag是指拖放功能,例如将图像文件拖放到图像编辑器中。这与简单地在应用程序上移动控件不同。

子控件(在这种情况下为文本块)无法在网格内部自由移动。您需要添加一个画布控件。画布控件会自动扩展以填充其父级,因此它将自动扩展以填充网格。

您可能正在寻找“操纵”,而不是“拖放”。您将需要处理TextBLock的ManipulationStartedManipulationDeltaManipulationCompleted事件:

<Grid>
    <Canvas>
        <TextBlock ManipulationStarted="TextBlock_ManipulationStarted"
                   ManipulationDelta="TextBlock_ManipulationDelta"
                   ManipulationCompleted="TextBlock_ManipulationCompleted"></TextBlock>
    </Canvas>
</Grid>

看看“ BasicInput”示例,了解如何进行操作:https://github.com/Microsoft/Windows-universal-samples

答案 1 :(得分:1)

如何控制键盘键的操作? 我不能限制区域。我尝试使用Canvas,但无法限制区域。

实际上,我们可以将所有内容不仅用于画布。 我在XAML中做到了

<Grid Width="300" Height="300">
        <TextBlock Text="mahdi" Name="t" ManipulationMode = "TranslateX, TranslateY, Scale"  

    ManipulationDelta = "t_ManipulationDelta" >

            <TextBlock.RenderTransform>
                <CompositeTransform x:Name="t_Transform" />
            </TextBlock.RenderTransform>
        </TextBlock>



</Grid>

和c#

namespace Manipulation
{
    public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }




    private void t_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        this.t_Transform.TranslateX += e.Delta.Translation.X;
        this.t_Transform.TranslateY += e.Delta.Translation.Y;
    }


}

} 但是我不能限制区域。我尝试使用Canvas,但无法限制区域。