【问题标题】:Get the UI object from a data object从数据对象中获取 UI 对象
【发布时间】:2010-02-01 16:47:02
【问题描述】:

我有一个类 (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;
    }

【问题讨论】:

  • 您不能直接命名您的DataTemplate 并以这种方式引用它吗?
  • 好点。那不会给我我真正需要的东西。我已经更改了我的问题以显示我真正需要的内容。

标签: c# wpf data-binding datatemplate


【解决方案1】:

没有这样的方法,只是因为数据对象和 UI 对象之间没有一对一的关系,即可能有多个 UI 对象的数据上下文指向同一个数据对象。

如果您的数据对象是某种项目控件的一部分(ItemsControlListBoxListViewDataGrid 等),您可以使用ItemsControl.ItemContainerGenerator.GetContainerFromItem 方法获取相关的项目容器。

【讨论】:

  • 但我不是在寻找数据绑定对象。我正在寻找由 myMockWI 的 DataTemplate 表示的 UI 对象。如果我在屏幕上有一个 MockWI,它应该显示为我的 DataTemplate。 1比1对吗?我不应该能够得到这个值吗?
  • 我添加了更多代码来展示我想要做什么。也许你有一两个建议?
  • 您的数据对象可以在您的 UI 上多次表示。无论您在哪里都有一个&lt;ContentControl ...&gt;,其内容绑定到您的数据对象,都会有一个数据模板的实例在 UI 上表示它。
  • 啊,我明白了。好当。我想我得另谋出路了。
【解决方案2】:

好吧,你不应该做这样的事情(在架构上肯定有更正确的方法)。

如果您需要对 DataTemplate 内部的某些内容进行动画处理,为什么不使用 EventTrigger-s 或带有 EnterActions/ExitActions 的简单触发器,您可以在其中指定要运行的动画。

动画 (Storyboard) 可以用 XAML 编写和/或使用工具(例如 Blend)设计。

【讨论】:

  • 我没有在数据模板中做动画。我只是想知道它长什么样。 (动画实际上是在拖动时的拖放动画。
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2013-08-11
  • 1970-01-01
相关资源
最近更新 更多