这是交易。我可以创建一个ListBox并对其进行设计。我可以编辑该模板的副本,以便在Expression Blend 3中可以使用状态。并且可以更改状态,以便在选择时修改订单项的背景颜色。但是由于ContentPresenter的原因,我无法更改文本的前景色!有没有人有任何示例XAML显示如何完成这个看似简单的任务?如何使用VisualStateManager更改ListBoxItem的文本颜色(前景)?
答案似乎在于去除ContentPresenter,并用某种ListBoxItem的样式或模板替换它,但是这是我卡住。 ListBox的ContentPresenter引用其他一些模板“{TemplateBinding Template}” - 那是哪里?另外,当我尝试以任何方式修改ContentPresenter时,States面板都是空白的,我只剩下一片XAML。幸运的是,有CTRL-Z!
我真的认为微软重新思考XAML的做法或使混合更加完整的工具。它应该工作的方式是我应该能够点击ANY元素并为其定义状态。如果我试图违反规则,Blend应该告诉我这一点,并提供一种方法来解决它。只是让国家面板变空是没有帮助的。
我用一个由用户控件组成的自定义DataTemplate替换了ContentPresenter。这个控件有一个文本块。为了VSM的工作,我不知何故必须在ListBox引发SelectionChanged事件时获得对实际自定义控件实例的引用。这是有问题的。 VSM.GoToState方法需要传递给它的实例,以便它可以工作。我似乎无法获得参考。想法?我同意你应该能够'摆弄vsm'来完成这项工作,但应该是最佳的词,在这里。不过,我还没有看到有人这样做。 – Wade 2010-02-04 19:43:30
现在,我可以在控件的Loaded事件中将每个自定义DataTemplate实例捕获到数组中,然后使用数字索引来查找基于父列表框的SelectedIndex属性的实例,但这很难扩展。 – Wade 2010-02-04 19:45:06
嗯,我确实找到了一种不使用VSM的方法,但它消除了动画播放的能力。我将Textblock的Foreground更改为{TemplateBinding Foreground},然后在ListBoxItem上设置Foreground。叹息...... – Wade 2010-02-04 20:35:36