我有一个类(MockWI)我在app.xml中定义了以下DataTemplate
<DataTemplate DataType="{x:Type local:MockWI}">
<Button Content="{Binding Name}"/>
</DataTemplate>
在我的代码中,我需要找到MockWI实例的UI对象。
现在我这样做:
Button elt = new Button { Content = myMockWI};
但是这给了我一个按钮按钮。
我想获得名为myMockWI的MockWI按钮。像这样:
Button elt = GetUIControlFromVar(myMockWI);
有办法做到这一点吗?
添加更多代码以显示上下文:
public UIElement GetVisualFeedback(IDataObject obj)
{
MockWI test = ExtractElement(obj);
// Since Content is set to a MockWI I get a button in a button.
Button elt = new Button{ Content = test, Opacity = 0.5, IsHitTestVisible = false };
DoubleAnimation anim = new DoubleAnimation(0.75, new Duration(TimeSpan.FromMilliseconds(500)))
{
From = 0.25,
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever
};
elt.BeginAnimation(UIElement.OpacityProperty, anim);
return elt;
}
答案 0 :(得分:2)
没有这样的方法,只是因为数据对象和UI对象之间没有一对一的关系,即可能有几个UI对象的数据上下文指向同一个数据对象。
如果您的数据对象属于某种项控件(ItemsControl
,ListBox
,ListView
,DataGrid
等),则可以获取相关的项容器使用ItemsControl.ItemContainerGenerator.GetContainerFromItem
方法。
答案 1 :(得分:1)
好吧,你不应该做那样的事情(在建筑上肯定有更正确的方法)。
如果您需要对DataTemplate
内的某些内容进行动画处理,为什么不使用EventTrigger
- 或简单触发器EnterActions
/ ExitActions
指定要运行的动画。
动画(Storyboard
)可以用XAML编写和/或使用工具设计(例如Blend)。