我想创建一个控制:自定义的ItemsControl和选择支持
- 自ItemsControl派生,
- 可以绑定到枚举的列表,
- 每个枚举它会显示单选按钮,
- 当选中RadioButton时,SelectedItem将包含与RadioButton相关联的枚举值。
我已经设法实现了上面列表中的前三个点,但是我对第四个项目有问题。我怀疑它可能与项目容器类的错误实现或generic.xaml中错误的项目模板定义有关。
物品容器看起来像这样:
public class MyEnumSelectorItem : ContentControl
{
public static readonly DependencyProperty IsSelectedProperty;
static MyEnumSelectorItem()
{
IsSelectedProperty = Selector.IsSelectedProperty.AddOwner(typeof(MyEnumSelectorItem));
}
public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
static readonly DependencyProperty ModeProperty =
DependencyProperty.Register("Mode", typeof(MyEnum), typeof(MyEnumSelector), new PropertyMetadata());
public MyEnum Mode
{
get { return (MyEnum)GetValue(ModeProperty); }
set { SetValue(ModeProperty, value); }
}
}
项容器类型与使用IsItemItsOwnContainerOverride/GetContainerForItemOverride/PrepareContainerForItemOverride
方法覆盖选择器控制(从System.Windows.Controls.Primitives.Selector
派生)相关联。
generic.xaml的相关片段看起来是这样的:
<Style TargetType="{x:Type controls:MyEnumSelector}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<RadioButton Content="{Binding}"
IsChecked="{Binding IsSelected, Mode=TwoWay}"
GroupName="enumSelector" Height="25" FontWeight="Bold" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
上述假设IsSelected属性的正确的绑定会自动导致SelectedItem属性进行设置(我希望是正确的,不是吗?)。
你不应该从'Selector'派生吗? 'SelectedItem'在'Selector'上定义,而不是'ItemsControl'。 –
实际上它来自Selector(稍后在我的问题中指出) - 在第一句中,我的意思是它应该至少从ItemsControl派生。 –