wpf 菜单项 style.trigger

标签 wpf menuitem datatrigger

我正在尝试实现一个可检查的菜单,其中一次仅检查一个菜单项,即单选按钮行为。我想通过样式和数据触发器来实现此目的,以将其保留在 xaml 中。目的是观察其他项目;每当任何其他为 true 时,都应将其设置为 false。事实上,一次只检查一个,但需要按两次按钮。我怎样才能让它只按一个按钮就可以工作?

<MenuItem Header="Header">
            <MenuItem x:Name="ChangesMenuItem" Header="Changes" IsCheckable="True" Command="{Binding ViewChangesCommand}">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <Style.Triggers>                                
                            <DataTrigger Binding="{Binding ElementName=SettingsMenuItem, Path=IsChecked}" Value="True">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=SyncMenuItem, Path=IsChecked}" Value="True">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
            <MenuItem x:Name="SettingsMenuItem" Header="Settings" IsCheckable="True" Command="{Binding ViewSettingsCommand}">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=ChangesMenuItem, Path=IsChecked}" Value="True">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=SyncMenuItem, Path=IsChecked}" Value="True">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
            <MenuItem x:Name="SyncMenuItem" Header="Sync" IsCheckable="True" Command="{Binding ViewSyncCommand}">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=ChangesMenuItem, Path=IsChecked}" Value="True">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=SettingsMenuItem, Path=IsChecked}" Value="True">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
        </MenuItem>

最佳答案

我有一个标题,它会根据选择而变化,所以我决定绑定(bind)到该属性。

<Menu>
        <MenuItem Header="{Binding Header}">
            <MenuItem x:Name="ChangesMenuItem" Header="Changes" IsCheckable="True" Command="{Binding ViewChangesCommand}">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <Setter Property="IsChecked" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Header}" Value="Changes">
                                <Setter Property="IsChecked" Value="True"/>
                            </DataTrigger>                                                             
                        </Style.Triggers>                            
                    </Style>
                </MenuItem.Style>                   
            </MenuItem>
            <MenuItem x:Name="SettingsMenuItem" Header="Settings" IsCheckable="True" Command="{Binding ViewSettingsCommand}">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <Setter Property="IsChecked" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Header}" Value="Settings">
                                <Setter Property="IsChecked" Value="True"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
            <MenuItem x:Name="SyncMenuItem" Header="Sync" IsCheckable="True" Command="{Binding ViewSyncCommand}">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <Setter Property="IsChecked" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Header}" Value="Sync">
                                <Setter Property="IsChecked" Value="True"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
        </MenuItem>
    </Menu>

关于wpf 菜单项 style.trigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44507562/

相关文章:

c# - ComboBox:根据属性状态设置样式内容

c# - WPF 以编程方式使用 DataTrigger 添加 DataGridTextColumn

C# WPF BitmapSource 内存泄漏?

wpf - 转到 XAML 中的定义

c# - 根据其他列中的值更改 DataGridTextColumn 单元格上的字符串格式,并保持值可排序

WPF 数据绑定(bind) IsEnabled 属性

wpf - 无法在数据触发器中使用标签的自定义属性

wpf - 将实现与模式的某些部分匹配

android - 如何将 Actionbar 项目与 Viewpager + Fragments 一起使用

c# - 为 MenuItem 使用 DisplayMemeberBinding 的多重绑定(bind)