首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows中触发数据板选择器?

如何在Windows中触发数据板选择器?
EN

Stack Overflow用户
提问于 2012-11-20 05:19:39
回答 1查看 1K关注 0票数 0

我有一个属性,取决于它的状态(比如A和B),我要么显示动画的用户控件,要么显示图像。

现在,如果属性更改,我希望再次触发--数据板选择器。在搜索时,我找到,在WPF中,我可以使用DataTemplate.Trigger,但它是WP中的不可用

所以,我的问题是

  • 是它们触发数据板选择器的一种方式,因此当属性从状态A更改为B时,将选择适当的用户控件。如果是,那么请举例说明如何实现它。

另外,由于只有两种状态,如果认为我可以使用转换器来折叠可见性。对于基本的情况,如果是其他情况,我需要编写两个转换器。(我可以只使用一个转换器吗?)具体情况如下。

如果状态== A: 选择userControl_A 其他:选择userControl_B

另外,

  • 当动画用户控件处于崩溃状态时,它会影响性能吗?

编辑--刚刚实现,我可以使用参数对象只编写一个转换器.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 07:44:17

您可以实现类似于所描述的DataTemplateSelector的这里

我用过了,效果也很好。

编辑:

如果需要在属性更改时更新DataTemplate,则应订阅TemplateSelector中数据对象的PropertyChanged事件,并再次执行SelectTemplate方法。

下面是代码示例:

代码语言:javascript
复制
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
    City itemAux = item as City;

    // Subscribe to the PropertyChanged event
    itemAux.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(itemAux_PropertyChanged);

    return GetTemplate(itemAux, container);
}

private DataTemplate GetTemplate(City itemAux, DependencyObject container)
{
    if (itemAux != null)
    {
        if (itemAux.Country == "Brazil")
            return BrazilTemplate;
        if (itemAux.Country == "USA")
            return UsaTemplate;
        if (itemAux.Country == "England")
            return EnglandTemplate;
    }

    return base.SelectTemplate(itemAux, container);
}

void itemAux_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    // A property has changed, we need to reevaluate the template
    this.ContentTemplate = GetTemplate(sender as City, this);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13467018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档