我正在尝试为我在c#中为Windows Phone 8创建的Type的特定对象实现拖放。我正在使用这样的操作事件:
deck[r[i, j]].card.ManipulationCompleted += new EventHandler<ManipulationCompletedEventArgs>(ImageManipulationCompleted);
private void ImageManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
//something
}
如何将对象更改为我想要的类型?
答案 0 :(得分:1)
您可以做的就是调用一个方法来接收type
而不是使用标准的ImageManipulationCompleted
处理程序。我不知道deck[r[i, j]]
类型是什么,但您可以使用正确的类型替换下面的MyType
。
deck[r[i, j]].card.ManipulationCompleted += delegate(object s, ManipulationCompletedEventArgs e){ CardManipulated(s, e, deck[r[i, j]]); };
private void CardManipulated(object sender, ManipulationCompletedEventArgs e, MyType selectedObject)
{
//you know have access to selectedObject which is of type deck[r[i, j]],
//the ManipluationCompletedEvents properties if needed,
//and the actual card Image object (sender).
}
答案 1 :(得分:1)
keyboardP的解决方案可以正常使用。但我个人更喜欢将我需要的信息存储在控件的Tag
属性中,该属性是为此目的而设计的。
deck[r[i, j]].card.Tag = deck[r[i, j]];
deck[r[i, j]].card.ManipulationCompleted += ImageManipulationCompleted;
private void ImageManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
var deck = (Deck)((FrameworkElement)sender).Tag;
}
keyboardP方法的好处在于,由于您直接接收所需对象作为方法的参数,因此更容易阅读。缺点是您必须为所需的每个事件声明一个自定义委托,并且您无法直接从XAML分配事件处理程序。我的解决方案有点难以阅读,但解决了这一点。
最后,哪种解决方案更好地取决于您的品味和需求。
答案 2 :(得分:0)
你不能。
由于您使用此代码new EventHandler<>(..)
订阅了某个活动,因此您无法更改sender
的类型,因为在EventHandler<>
的说明中只有object
个发件人:
public delegate EventHandler<T>(object sender, T eventArgs) where T : EventArgs
如果您需要创建自己的委托,您可以建立工厂或只是写下:
public delegate EventHandler<T, TArgs>(T sender, TArgs eventArgs) where TTArgs : EventArgs
答案 3 :(得分:0)
ManipulationCompletedEventHandler
签名在其第一个参数
public delegate void ManipulationCompletedEventHandler(object sender,
ManipulationCompletedRoutedEventArgs e);
因此,您无法更改签名,但您可以use delegate to typecast
始终对your type
对象 -
deck[r[i, j]].card.ManipulationCompleted += (s, e) =>
ManipulateMe_ManipulationCompleted((YourType)s, e);
private void ImageManipulationCompleted(YourType sender,
ManipulationCompletedEventArgs e)
{
//something
}
将YourType
替换为您想要的Type
(TextBox或您想要的任何内容)