【问题标题】:DataTemplateSelector get parent ActualWidthDataTemplateSelector 获取父级 ActualWidth
【发布时间】:2015-06-24 12:08:26
【问题描述】:

我正在尝试根据 Pages ActualWidth 将不同的 DataTemplates 设置为 ListBox。本质上,我想显示更多数据来填补空白。

由于它自己定义的 Item 也是要使用的 DataTemplate 的参数,我认为最好的方法是使用 DataTemplateSelector。

什么是实现这一目标的最佳方法,因为我没有找到将 DependencyProperty 添加到 DataTemplateSelector 的方法。

【问题讨论】:

    标签: wpf datatemplateselector actualwidth


    【解决方案1】:

    使用DataTemplateSelector 时,您可以访问将应用DataTemplate 的数据项。来自 MSDN 上的DataTemplateSelector 页面:

    public class TaskListDataTemplateSelector : DataTemplateSelector
    {
        public override DataTemplate
            SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;
    
            if (element != null && item != null && item is Task)
            {
                Task taskitem = item as Task;
    
                if (taskitem.Priority == 1)
                    return
                        element.FindResource("importantTaskTemplate") as DataTemplate;
                else 
                    return
                        element.FindResource("myTaskTemplate") as DataTemplate;
            }
    
            return null;
        }
    }
    

    注意object item 输入参数是如何转换为上例中项目的实际类型的。因此,您可以向您的数据项类添加一个属性来保存大小信息,您可以使用这些信息来确定要应用哪个DataTemplate

    【讨论】:

    • 谢谢。但这意味着我必须如您所指出的,修改来自(在这种情况下)SQL 服务器的项目——我不想这样做。除了制作某种应用程序静态变量之外,还有其他方法吗?
    • 要么创建一个单例类,要么只创建一个包含静态变量的静态类。然后你可以从任何地方访问它,比如Singleton.Instance.YourProperty
    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2014-01-25
    相关资源
    最近更新 更多