Get the UI object from a data object

你说的曾经没有我的故事 提交于 2019-12-24 16:19:05

问题


I have a class (MockWI) that I have defined the following DataTemplate in app.xml

<DataTemplate DataType="{x:Type local:MockWI}">
    <Button Content="{Binding Name}"/>
</DataTemplate>

In my code I need to find the UI object that an instance of MockWI has.

Right now I do this:

Button elt = new Button { Content = myMockWI};

But that gives me a button in a button.

I want to just get the button that is the MockWI called myMockWI. Something like this:

Button elt = GetUIControlFromVar(myMockWI);

Is there a way to do this?


Adding More Code to show Context:

    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;
    }

回答1:


There's no such method, if only for the reason that there is not a one-to-one relationship between data objects and UI objects, i.e. there could be several UI objects with data contexts pointing at the same data object.

If your data object is part of some kind of items control (ItemsControl, ListBox, ListView, DataGrid, etc.) you can obtain the relevant item container by using the ItemsControl.ItemContainerGenerator.GetContainerFromItem method.




回答2:


Well, you shouldn't do anything like that (there's for sure a more correct way architecturally).

If you need to do animation to something inside of the DataTemplate why don't you use EventTrigger-s or simple triggers with EnterActions/ExitActions where you can specify which animation to run.

The animation (Storyboard) can be written in XAML and/or designed using a tool (e.g. Blend).



来源:https://stackoverflow.com/questions/2178387/get-the-ui-object-from-a-data-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!