Я хочу создать «кнопку с несколькими действиями», если у вас нет лучшего имени. то есть кнопка, которая похожа на ComboBox (то есть содержимое со стрелкой-переключателем вверх на одном конце), где корневое содержимое является кнопкой, на которую можно щелкнуть напрямую, или кнопка переключения может быть нажата для отображения большего количества кнопок, каждая из которых связана с различным текстом и связана в другую команду.
Должна быть кнопка по умолчанию, которая всегда видна в корне ComboBox - т.е. если пользователь открывает поле со списком, когда он закрывается, элемент по умолчанию должен оставаться видимым, даже если он нажал (выбрал) другую пункт.
Я пытался сделать это с помощью элемента управления ComboBox, и, хотя он там составляет около 75%, я на самом деле начинаю задумываться о том, иду ли я в правильном направлении.
XAML и код ниже. Проблемы, с которыми я сейчас сталкиваюсь:
- Когда активная кнопка нажата (т.е. CanExecute = true), поле со списком не закрывается, однако при нажатии неактивной кнопки окно со списком закрывается
- Кнопка, отображаемая в корне комбинированного списка, не активируется, т. Е. Сначала нужно открыть комбо (в этом случае дублируется элемент по умолчанию), и можно щелкнуть элемент в списке
Является ли комбинированный список подходящим решением для этого? Если так, как бы я достиг вышеупомянутых пунктов. Если нет, то какое решение лучше?
Я определил класс следующим образом:
public class ActionItem
{
public string Text { get; set; }
public string Shortcut { get; set; }
public ICommand ActionCommand { get; set; }
}
и хочу иметь возможность привязать ObservableCollection of ActionItems к моему элементу управления.
В настоящее время у меня есть следующий XAML:
<ComboBox x:Name="ActionCombo" ItemsSource="{Binding Path=ActionItems}" SelectedItem="{Binding DefaultItem}" Grid.Row="0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged" SourceName="ActionCombo">
<ei:CallMethodAction MethodName="SetDefaultItem" TargetObject="{Binding Path=DataContext}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" >
<Button Command="{Binding ActionCommand}" >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Text}"/>
<TextBlock Text="{Binding Shortcut}" />
</StackPanel>
</Button>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>