拖放中的自定义接受操作
Custom Accepted Operation in Drag and Drop
我在做图书馆管理软件。这是屏幕截图:
我已经实现了一些功能,比如将一本书拖到删除图标中以删除这本书。但是有两个障碍:
- DataPackageOperation只有四种可能:复制,link,移动none。因此,在四个之后,很难区分书放在哪个 AppBarButton 上。
- 我打算向 CommandBar 添加更多项目。但是只有四种可能的操作
我需要一种方法来向用户提供自定义反馈,告知用户当前拖过哪个 AppBarButton。 DataPackageOperation 只包含四个。其中,不能使用'None'(因为会造成混淆)。有没有办法提供反馈?
I need a way to give the user a custom feedback as to which AppBarButton is the book currently dragged over
您可以通过自定义拖动 UI 为用户提供自定义反馈。以下代码来自XamlDragAndDrop
官方代码示例。
private void TargetTextBox_DragEnter(object sender, Windows.UI.Xaml.DragEventArgs e)
{
/// Change the background of the target
VisualStateManager.GoToState(this, "Inside", true);
bool hasText = e.DataView.Contains(StandardDataFormats.Text);
e.AcceptedOperation = hasText ? DataPackageOperation.Copy : DataPackageOperation.None;
if (hasText)
{
e.DragUIOverride.Caption = "Drop here to insert text";
// Now customize the content
if ((bool)HideRB.IsChecked)
{
e.DragUIOverride.IsGlyphVisible = false;
e.DragUIOverride.IsContentVisible = false;
}
else if ((bool)CustomRB.IsChecked)
{
var bitmap = new BitmapImage(new Uri("ms-appx:///Assets/dropcursor.png", UriKind.RelativeOrAbsolute));
// Anchor will define how to position the image relative to the pointer
Point anchor = new Point(0,52); // lower left corner of the image
e.DragUIOverride.SetContentFromBitmapImage(bitmap, anchor);
e.DragUIOverride.IsGlyphVisible = false;
e.DragUIOverride.IsCaptionVisible = false;
}
// else keep the DragUI Content set by the source
}
}
我在做图书馆管理软件。这是屏幕截图:
我已经实现了一些功能,比如将一本书拖到删除图标中以删除这本书。但是有两个障碍:
- DataPackageOperation只有四种可能:复制,link,移动none。因此,在四个之后,很难区分书放在哪个 AppBarButton 上。
- 我打算向 CommandBar 添加更多项目。但是只有四种可能的操作
我需要一种方法来向用户提供自定义反馈,告知用户当前拖过哪个 AppBarButton。 DataPackageOperation 只包含四个。其中,不能使用'None'(因为会造成混淆)。有没有办法提供反馈?
I need a way to give the user a custom feedback as to which AppBarButton is the book currently dragged over
您可以通过自定义拖动 UI 为用户提供自定义反馈。以下代码来自XamlDragAndDrop
官方代码示例。
private void TargetTextBox_DragEnter(object sender, Windows.UI.Xaml.DragEventArgs e)
{
/// Change the background of the target
VisualStateManager.GoToState(this, "Inside", true);
bool hasText = e.DataView.Contains(StandardDataFormats.Text);
e.AcceptedOperation = hasText ? DataPackageOperation.Copy : DataPackageOperation.None;
if (hasText)
{
e.DragUIOverride.Caption = "Drop here to insert text";
// Now customize the content
if ((bool)HideRB.IsChecked)
{
e.DragUIOverride.IsGlyphVisible = false;
e.DragUIOverride.IsContentVisible = false;
}
else if ((bool)CustomRB.IsChecked)
{
var bitmap = new BitmapImage(new Uri("ms-appx:///Assets/dropcursor.png", UriKind.RelativeOrAbsolute));
// Anchor will define how to position the image relative to the pointer
Point anchor = new Point(0,52); // lower left corner of the image
e.DragUIOverride.SetContentFromBitmapImage(bitmap, anchor);
e.DragUIOverride.IsGlyphVisible = false;
e.DragUIOverride.IsCaptionVisible = false;
}
// else keep the DragUI Content set by the source
}
}