Отображение нескольких контекстных меню в строке сетки WPF - PullRequest
0 голосов
/ 08 августа 2011

Я хочу иметь два контекстных меню в виде сетки в моем настольном приложении на основе WPf. В настоящее время я могу отобразить одно контекстное меню, но я хочу показать контекстное меню 1 для одного условия и контекстное меню 2 для другого условия. Как это сделать?

Я использую следующий код XAML для отображения сетки и контекстного меню

<dg:UCGrid x:Name="grdLetVariables" Grid.Row="2" GridTypeSource="LetGrid"
                                                 DataContext="{Binding}" >
                                <dg:UCGrid.Resources>
                                    <x:Array Type="{x:Type sys:Object}" x:Key="GridExtensions">
                                        <MenuItem Header="Delete" Click="ContextMenuDelete">
                                            <MenuItem.Icon>
                                                <Image Height="10" Source="../images/Delete.png"/>
                                            </MenuItem.Icon>
                                        </MenuItem>
                                        <Separator />
                                        <MenuItem Header="Move Up" Click="MoveUpLetGrdRow">
                                            <MenuItem.Icon>
                                                <Image Height="14" Source="../images/UpMove.png"/>
                                            </MenuItem.Icon>
                                        </MenuItem>
                                        <MenuItem Header="Move Down" Click="MoveDownLetGrdRow">
                                            <MenuItem.Icon>
                                                <Image Height="14" Source="../images/DownMove.png"/>
                                            </MenuItem.Icon>
                                        </MenuItem>
                                        <Separator />
                                        <MenuItem Header="Cancel" Click="CancelLetGrdRowEdit"/>
                                    </x:Array>
                                </dg:UCGrid.Resources>
                                <dg:UCGrid.ContextMenu>
                                    <ContextMenu>
                                        <ContextMenu.ItemsSource>
                                            <CompositeCollection>
                                                <CollectionContainer Collection="{StaticResource GridExtensions}" />
                                            </CompositeCollection>
                                        </ContextMenu.ItemsSource>
                                    </ContextMenu>
                                </dg:UCGrid.ContextMenu>
                            </dg:UCGrid>
                        </Grid>

1 Ответ

3 голосов
/ 08 августа 2011

Триггеры на DataGrid могут помочь вам здесь. Код ниже только для иллюстрации ...

<UserContorl.Resources>
    <ContextMenu x:Key="Condition1ContextMenu" ../>
    <ContextMenu x:Key="Condition2ContextMenu" ../>
</UserControl.Resources>
...
<Style TargetType="{x:Type dg:UCGrid}">
   <Style.Triggers>
      <DataTrigger Binding="{Binding Condition1}" Value="Value1">
          <Setter Property="ContextMenu" Value="{StaticResource Condition1ContextMenu}"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding Condition2}" Value="Value2">
          <Setter Property="ContextMenu" Value="{StaticResource Condition2ContextMenu}"/>
      </DataTrigger>
   </Style.Triggers>
</Style>

Условие конечно1 и условие2 должны быть исключены друг от друга. Если оба они применимы к сетке данных, то в силу заказа Condition2ContextMenu будет иметь приоритет.

Дайте мне знать, если это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...