【发布时间】:2016-04-30 12:21:50
【问题描述】:
我有一个自定义下拉菜单和两个或更多单选按钮:当第一个单选按钮被勾选时,下拉菜单被隐藏,当任何其他单选按钮被勾选时,下拉菜单可见并允许用户选择项目(例如,无线电所有项目、选定项目、选定的主要项目)。
当用户点击第二个或第三个收音机时,我需要默认展开下拉菜单(因此下拉菜单变得可见并立即展开)。
我有一个可行的方法,但它似乎不符合 WPF 的良好做法:
XAML:
<layout:MultiSelectCaseTypeComboBoxEdit
IsVisibleChanged="CaseTypesComboBox_OnIsVisibleChanged"
EditValue="{Binding Path=SelectedCaseTypes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
....
/>
*.xaml.cs:
private void CaseTypesComboBox_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var cb = sender as MultiSelectCaseTypeComboBoxEdit;
cb.IsPopupOpen = cb.IsVisible;
}
如您所见,在 IsVisibleChanged 事件中,我使下拉列表的 IsPopupOpen 值等于它的可见性。
但我的问题是,如何在 WPF 方法方面使用触发器/行为,而无需 *.xaml.cs 文件中的任何额外代码?
更新 1: 下面是基本控件样式的代码:
<Style TargetType="{x:Type layoutControls:EditableMultiSelectComboBoxEdit}"
x:Key="{x:Type layoutControls:EditableMultiSelectComboBoxEdit}"
BasedOn="{StaticResource {x:Type editors:ComboBoxEdit}}">
<Style.Triggers>
<Trigger Property="SelectedItemDeleted" Value="True">
<Setter Property="ToolTip" Value="The selected item(s) was delete. Click to refresh"/>
<Setter Property="BorderTemplate">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<Border BorderThickness="1" BorderBrush="Red">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
如您所见,它在这里使用了一些删除逻辑,并且基于 DevExpress ComboBoxEdit 控件。
更新 2: 我通过这种方式添加了样式:
<layout:MultiSelectCaseTypeComboBoxEdit.Resources>
<Style x:Key="EditableMultiSelectComboBoxEdit1"
TargetType="layout:MultiSelectCaseTypeComboBoxEdit" />
</layout:MultiSelectCaseTypeComboBoxEdit.Resources>
<layout:MultiSelectCaseTypeComboBoxEdit.Style>
<Style TargetType="layout:MultiSelectCaseTypeComboBoxEdit"
BasedOn="{StaticResource EditableMultiSelectComboBoxEdit1}">
也试过这个:
<layout:MultiSelectCaseTypeComboBoxEdit.Resources>
<Style x:Key="EditableMultiSelectComboBoxEdit1"
TargetType="{x:Type layout:MultiSelectCaseTypeComboBoxEdit}" />
</layout:MultiSelectCaseTypeComboBoxEdit.Resources>
<layout:MultiSelectCaseTypeComboBoxEdit.Style>
<Style TargetType="layout:MultiSelectCaseTypeComboBoxEdit"
BasedOn="{StaticResource EditableMultiSelectComboBoxEdit1}">
仍然遇到同样的错误。
在基本控件的样式中,它的键定义为
x:Key="{x:Type layoutControls:EditableMultiSelectComboBoxEdit}"
那么我该如何正确继承呢?
【问题讨论】: