首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在没有代码的情况下执行拖放操作

在没有代码的情况下执行拖放操作
EN

Stack Overflow用户
提问于 2014-07-28 12:08:44
回答 1查看 428关注 0票数 0

如何在不向代码隐藏文件添加代码的情况下执行拖放操作?我能用附加的属性来做这个吗?如果是,那怎么做?

起初,我认为我可以创建一个附加属性,并将其绑定到与拖动相关的任何拖动项的属性上。当该属性的状态发生变化时,我附加的属性的valueChanged方法处理程序将执行当前位于代码隐藏文件中的拖动逻辑。

但是,我还没有为拖动状态识别这样的属性。

注意:我没有使用棱镜,因为我正在实现一个Windows 8.1应用程序。因此,此时不支持棱镜。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 11:42:10

下面的答案涉及到管理没有代码隐藏的UIElement事件的总体模式。

摘要:我们可以访问使用附加属性的控件,在附加属性的元数据对象中,当附加属性的值发生变化时,我们可以调用事件处理程序。在我们的XAML文件中,附加属性的值设置为"true“。这将立即触发附加属性的元数据对象来更新状态,并为值的更改调用方法处理程序。

此示例演示两个控件,它们将在鼠标进入事件期间更改颜色:

XAML代码:

代码语言:javascript
运行
复制
<Window x:Class="Temp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:behaviors="clr-namespace:Temp.Behaviors"
        Title="MainWindow" Height="350" Width="525">
    <Canvas>
        <Ellipse Width="50" Height="50" Fill="Gray" Canvas.Top="0"
                 behaviors:AttachedProperties.ActivateOnMouseEnter="True" />

        <Ellipse Width="50" Height="50" Fill="Gray" Canvas.Left="200"
                 behaviors:AttachedProperties.ActivateOnMouseEnter="True" />
    </Canvas>
</Window>

附随的财产代码:

代码语言:javascript
运行
复制
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;

namespace Temp.Behaviors
{
    public class AttachedProperties : DependencyObject
    {
        public static readonly DependencyProperty ActivateOnMouseEnterProperty =
            DependencyProperty.RegisterAttached("ActivateOnMouseEnter", typeof(bool), typeof(AttachedProperties), new PropertyMetadata(false, ActivateOnMouseEnter_ValueChanged));

        private static void ActivateOnMouseEnter_ValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            Ellipse element = dependencyObject as Ellipse;

            element.MouseEnter += (se, ev) =>
                {
                    element.Fill = new SolidColorBrush(Colors.Orange);
                };
        }

        public static void SetActivateOnMouseEnter(UIElement element, bool value)
        {
            element.SetValue(ActivateOnMouseEnterProperty, value);
        }
    }
}

注意:在这段代码中,我们重复地订阅鼠标enter事件,而不取消订阅(这很糟糕)。然而,为了简单起见,我把管理订阅的逻辑抛在脑后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24994940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档