当我的组合框展开并选择一个项目时,我希望组合框更改视觉状态(突出显示)。这将表示已选择某项。我尝试了各种VisualState,但是在这种情况下它们都不会触发。我怎样才能做到这一点?谢谢。
标准的ComboBox根本没有状态来区分选择某物和什么都不选。
解决底层问题的方法有很多种,并且主要取决于以下问题的答案:
您是否真的需要更改ComboBox本身的外观,还是足以突出显示所选项目的样式?
如果是后者,最好使用为ComboBoxItems使用自定义控件模板的相当简单的方法。
如果您真的想以这种方式设置ComboBox本身的样式,我可以想到两种选择:
A)使用自定义模板将自定义状态添加到ComboBox。
复制ComboBox的控件模板,然后将另一个状态组添加到已经存在的状态中。两者通常都在Expression Blend中完成。
之后,您可以使用以下命令更新代码中的新状态
VisualStateManager.GoToState(this, "Selected", true);
例如。选择第一项时,您必须自己设置这些状态。这可以在SelectionChanged事件上完成。
B)从ComboBox派生
如果您想经常以这种方式使用该控件,则值得从ComboBox派生出自己的自定义控件。
它看起来像这样:
[TemplateVisualState(Name = "SelectedStates", GroupName = "Unselected")]
[TemplateVisualState(Name = "SelectedStates", GroupName = "Selected")]
// ... (more attributes copied from the ComboBox ones)
public class MyComboBox : ComboBox
{
public MyComboBox()
{
SelectionChanged += HandleSelectionChanged;
DefaultStyleKey = typeof(MyComboBox);
}
void HandleSelectionChanged(object sender, SelectionChangedEventArgs e)
{
VisualStateManager.GoToState(this, SelectedItem != null ? "Selected" : "Unselected", true);
}
}
然后,您将需要基于默认ComboBox样式(或通常使用的任何样式)的默认样式。
请注意,我没有进行任何测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句