Каков наилучший способ создания списка кнопок Silverlight (кнопка с несколькими действиями)? - PullRequest
0 голосов
/ 24 ноября 2011

Я хочу создать «кнопку с несколькими действиями», если у вас нет лучшего имени. то есть кнопка, которая похожа на 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>
...