如何在不向代码隐藏文件添加代码的情况下执行拖放操作?我能用附加的属性来做这个吗?如果是,那怎么做?
起初,我认为我可以创建一个附加属性,并将其绑定到与拖动相关的任何拖动项的属性上。当该属性的状态发生变化时,我附加的属性的valueChanged方法处理程序将执行当前位于代码隐藏文件中的拖动逻辑。
但是,我还没有为拖动状态识别这样的属性。
注意:我没有使用棱镜,因为我正在实现一个Windows 8.1应用程序。因此,此时不支持棱镜。
发布于 2014-07-31 11:42:10
下面的答案涉及到管理没有代码隐藏的UIElement事件的总体模式。
摘要:我们可以访问使用附加属性的控件,在附加属性的元数据对象中,当附加属性的值发生变化时,我们可以调用事件处理程序。在我们的XAML文件中,附加属性的值设置为"true“。这将立即触发附加属性的元数据对象来更新状态,并为值的更改调用方法处理程序。
此示例演示两个控件,它们将在鼠标进入事件期间更改颜色:
XAML代码:
<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>
附随的财产代码:
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事件,而不取消订阅(这很糟糕)。然而,为了简单起见,我把管理订阅的逻辑抛在脑后。
https://stackoverflow.com/questions/24994940
复制相似问题