2
ObservableCollection<ElementType>
컬렉션에 대한 바인딩은 ComboBox
입니다. Name과 Type 속성이 모두 null로 설정되어있는 선택 불가능한 구분 기호를 갖고 싶습니다. name이 문자열로 설정되고 Type이 null이면 선택할 수없는 머리글/제목이되고 싶습니다. 그렇지 않으면 요소를 선택 가능한 요소로 만들지 만 약간의 여백을두고 싶습니다. ComboBox 요소의 스타일 지정
내 두 가지 문제
은 다음과 같습니다 : 지금까지 나는 곳
이
입니다- 선택한 항목이 아니라 이름 문자열보다, 이름 공간 ElementType에 개체로 표시됩니다 .
- 활성화 된 요소의 강조 표시가 MouseOver에 더 이상 표시되지 않습니다.
XAML :
<ComboBox Grid.Column="1" Grid.Row="2" Style="{StaticResource ElementTypeComboBoxStyle}"
ItemsSource="{Binding Path=Element.ElementTypeList}"
SelectedItem="{Binding Path=Element.SelectedElementType}">
<ComboBox.Resources>
<converters:NullToBooleanConverter x:Key="NullToBooleanConverter" />
</ComboBox.Resources>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name, Converter={StaticResource NullToBooleanConverter}}" Value="True" />
<Condition Binding="{Binding Path=Type, Converter={StaticResource NullToBooleanConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Separator HorizontalAlignment="Stretch" />
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name, Converter={StaticResource NullToBooleanConverter}}" Value="False" />
<Condition Binding="{Binding Path=Type, Converter={StaticResource NullToBooleanConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<TextBlock Text="{Binding Path=Name}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name, Converter={StaticResource NullToBooleanConverter}}" Value="False" />
<Condition Binding="{Binding Path=Type, Converter={StaticResource NullToBooleanConverter}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<TextBlock Text="{Binding Path=Name}" Margin="10,0,0,0" />
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
C 번호 : 나는 내 요구에 조금 무거운 것으로 생각하기 때문에
public class ElementType {
public ElementType(string name, Type type) {
Name = name;
Type = type;
}
public string Name { get; private set; }
public Type Type { get; private set; }
}
private static ObservableCollection<ElementType> _elementTypeList = new ObservableCollection<ElementType> {
// Controls
new ElementType("Controls:", null),
new ElementType("Analog Output Slider", typeof(AnalogOutputSliderControl)),
new ElementType("Digital Output Button", typeof(DigitalOutputButtonControl)),
new ElementType(null, null), // Separator
// Indicators
new ElementType("Indicators:", null),
new ElementType("Numeric Value", typeof(NumericValueIndicator)),
new ElementType("ROV Illustration", typeof(RovIllustration)),
new ElementType("Trend Graph", typeof(TrendGraphIndicator)),
new ElementType(null, null), // Separator
// Generic element
new ElementType("None", typeof(Element))
};
[XmlIgnore]
public static ObservableCollection<ElementType> ElementTypeList { get { return _elementTypeList; } }
당신이 텍스트와 드롭 다운에 대해 다른 템플릿을 사용하여 해결할 수있는 첫 번째 문제는, ([이 질문]를 참조 https://stackoverflow.com/q/4672867/1997232). 두 번째 것은 - 당신이 원하는 것을 분명하지 않습니다. 또한이 솔루션은 화살표 키 선택 (드롭 다운 없음)과 어떻게 작동합니까? – Sinatr
@Sinatr이 지적했듯이 이것은 Template Selector의 완벽한 시나리오입니다. – XAMlMAX
강조 표시를 유지하는 가장 쉬운 방법은 아무 것도 사용하지 않도록 설정하는 것입니다. separator는 유효성 검사 중에'SelectedItem'으로 설정됩니다. 그것도 화살표 키와 함께 작동합니다. – Sinatr