【问题标题】:Silverlight changing styles based on an objects property value (ie DataTrigger)Silverlight 根据对象属性值更改样式(即 DataTrigger)
【发布时间】:2010-12-23 05:32:08
【问题描述】:

有没有人有一个成功的解决方法来根据底层数据对象的属性更改 Silverlight 中的样式,因为当值更改时,样式也会更改。我简单地使用了 WPF,它显然有 DataTrigger,它似乎涵盖了这一点,但在 Silverlight 中缺少它。

我发现了这个: http://blois.us/blog/2009/04/datatrigger-bindings-on-non.html

但它似乎不适用于样式..

感谢您的宝贵时间

【问题讨论】:

    标签: silverlight coding-style triggers


    【解决方案1】:

    Silverlight 不包含DataTemplateSelector,它用于根据数据绑定元素和数据对象选择数据模板。但是,建立自己的并不难。

    从继承自 System.Windows.Controls.ContentControl 的类开始。此类具有数据模板的属性和内容的属性,您可以使用它们进行绑定。像这样在OnContentChanged 方法上创建一个覆盖

    protected override void OnContentChanged(object oldContent, object newContent) 
    {
    }
    

    我更喜欢将模板放在单独的字典中,以防我需要在项目之间共享它们。 在此方法中,将此控件的模板设置为从字典中选取的模板。比如:

    Switch(DataStatus){
      case 0: ContentTemplate = LoadFromDictionary(
                                    "DataTemplateDemo;component/DataTemplates.xaml",
                                    "Status0Template");
              break;
      case 1: ContentTemplate = LoadFromDictionary(
                                    "DataTemplateDemo;component/DataTemplates.xaml", 
                                    "Status1Template");
              break;
       //etc      
    }
    

    在这种情况下,应该是带有几个数据模板的字典名称 DataTemplates.xaml。

    在您的 xaml 文件中,使用模板选择器类作为列表的模板:

     <ListBox x:Name="AnInterrestingList">
        <ListBox.ItemTemplate>
        <DataTemplate>
            <DataTemplateDemo:DateTemplateSelector Content="{Binding}"/>
        </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    我使用如下的辅助方法从字典中检索模板:

    public static DataTemplate LoadFromDictionary(string dictionary,
                                                  string template)
    {
        var doc = XDocument.Load(dictionary);
        var dict = (ResourceDictionary)XamlReader
                         .Load(doc.ToString(SaveOptions.None));
        return dict[template] as DataTemplate;
    }
    

    更新

    与此同时,我写了一篇博文,其中包含有关此主题的示例代码。它可以在my blog 上找到。

    【讨论】:

    • 一直在寻找这样的东西!,Google + 你 = 谢谢!
    • Sorskoot - 您的博文似乎不再可用。有新链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2023-03-08
    • 2019-03-09
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多