在 UWP 中按用户拖动 UI 元素



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

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

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

子控件(在本例中为 textblock(不能在网格内自由移动。您需要添加画布控件。画布控件会自动展开以填充其父级,因此它将自动展开以填充网格。

您可能正在寻找"操作",而不是"拖放"。您需要处理 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。

如何通过键盘键控制操作? 我无法限制区域。我尝试使用画布,但它无法限制区域。

实际上,我们可以将所有内容用于一个区域,而不仅仅是画布。 我在 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;
}

}

} 但我无法限制面积。我尝试使用画布,但它无法限制区域。

最新更新