Как динамически выбрать шаблон контекстного меню на основе значения свойства времени выполнения в XAML? (настройка контекстного меню)

Есть два контекстных меню. Для открытия нужного контекстного меню щелкните правой кнопкой мыши. Если IsData равно true, откроется ContextMenu1; если IsData имеет значение false, откроется ContextMenu2. Проблема будет раскрыта в XAML.

В DataTemplate есть два статических контекстных меню. Как их использует одно контекстное меню? Этот блок полностью устанавливает контекстное меню шаблона. Который выбирается в зависимости от условий.

<DataTemplate x:Key="ContextMenuControlTemplate">
    <DataTemplate.Resources>

        <ContextMenu x:Key="ContextMenuSet">
            <MenuItem>
                <MenuItem.Header>
                    <StackPanel Orientation="Horizontal">
                        <Image Width="15" Height="15" Source="{DynamicResource img_icon}"/>
                        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="  Add item" />

                    </StackPanel>
                </MenuItem.Header>
                <MenuItem.Icon>
                    <RadioButton IsChecked="True"/>
                </MenuItem.Icon>
            </MenuItem>
            <MenuItem Header="Remove"></MenuItem>
        </ContextMenu>

        <ContextMenu x:Key="ContextMenuDel">
            <MenuItem Header=" Del all"></MenuItem>
        </ContextMenu>

    </DataTemplate.Resources>

    <ContextMenu x:Name="contextMenuForItems"/>

    <DataTemplate.Triggers>

        <DataTrigger Binding="{Binding Data.IsData}" Value="true">
            <Setter TargetName="contextMenuForItems" Property="ContextMenu" Value="{StaticResource ContextMenuSet}" />
        </DataTrigger>

        <DataTrigger Binding="{Binding Data.IsData}" Value="false">
            <Setter TargetName="contextMenuForItems" Property="ContextMenu" Value="{StaticResource ContextMenuDel}" />
        </DataTrigger>

    </DataTemplate.Triggers>
</DataTemplate>

А здесь блок пытается использовать наше установленное контекстное меню. Проблема именно в этом.

                        <DataTemplate>
                            <DockPanel>
                                <ContextMenu>
                                <DataTemplate>
                                        <ContentControl Content="{Binding Data.IsData}"
                                    ContentTemplate="{StaticResource ContextMenuControlTemplate}"
                                     />
                                </DataTemplate>
                                </ContextMenu>
                            </DockPanel>
                        </DataTemplate>

person Anon8    schedule 14.08.2012    source источник
comment
чего ждать? О чем ты говоришь? что именно не работает? на какой платформе это основано? ...пожалуйста, прочтите FAQ, прежде чем задавать вопросы.   -  person devsnd    schedule 14.08.2012
comment
проверьте новую версию, пожалуйста   -  person Anon8    schedule 16.08.2012


Ответы (1)


Я использовал обходной путь. Я делаю одно сложное меню. И некоторые недостающие MenuItem удаляются. См. ключевые слова Visibility и booleanToVisibilityConverter. Мой пример ниже.

                                <DockPanel.ContextMenu>
                                    <ContextMenu>
                                        <MenuItem IsEnabled="False" Visibility="{Binding Data.IsData, Converter={StaticResource booleanToVisibilityConverter2}}">
                                            <MenuItem.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <Image Width="15" Height="15" Source="{DynamicResource img_icon}"/>
                                                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="  Add item" />

                                                </StackPanel>
                                            </MenuItem.Header>
                                            <MenuItem.Icon>
                                                <RadioButton IsChecked="True"/>
                                            </MenuItem.Icon>
                                        </MenuItem>
                                        <MenuItem Click="MenuItem_Click"  Header="Remove" Visibility="{Binding Data.IsData, Converter={StaticResource booleanToVisibilityConverter2}}" />
                                        <MenuItem Click="MenuItem_Click" Header="Del all" Visibility="{Binding Data.IsData, Converter={StaticResource booleanToVisibilityConverter2}, ConverterParameter=InvertCollapse}" />
                                    </ContextMenu>
                                </DockPanel.ContextMenu>

А booleanToVisibilityConverter2 — это оболочка для BooleanToVisibilityConverter, которая имеет дополнительные свойства.

person Anon8    schedule 16.08.2012