绑定菜单列表为空时,WPF显示消息而不是菜单中的菜单项

时间:2012-04-03 19:04:15

标签: wpf xaml wpf-controls

我有一个看起来像这样的菜单:

<MenuItem x:Name="menu" ItemsSource="{Binding Items}" Style="{StaticResource ItemStyle}">
    <MenuItem.Header>
        ...
    </MenuItem.Header>
    <MenuItem.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="PropertyNameOne" Value="{Binding}"/>
            <Setter Property="PropertyNameTwo" Value="{Binding}"/>
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

ItemsNotifyingCollection。但是,当Items列表为空时,我想显示一条消息,例如“菜单中没有项目”,而不是当前行为,这是一个很小的空盒子。有没有办法在XAML中做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用DataTrigger设置ItemContainerStyle:

<MenuItem x:Name="menu">
    <MenuItem.Header>
        ...
    </MenuItem.Header>
    <MenuItem.Style>
         <Style TargetType="{x:Type MenuItem} BasedOn="{StaticResource ItemStyle}">
              <Setter Property="ItemsSource" Value="{Binding Items}">
              <Setter Property="MenuItem.ItemContainerStyle">
                   <Setter.Value>
                        <MenuItem.ItemContainerStyle>
                            <Style TargetType="{x:Type MenuItem}">
                                <Setter Property="PropertyNameOne" Value="{Binding}"/>
                                <Setter Property="PropertyNameTwo" Value="{Binding}"/>
                            </Style>
                        </MenuItem.ItemContainerStyle>
                   </Setter.Value>
              </Setter>
              <Style.Triggers>
                  <DataTrigger Binding="{Binding Items.Count}">
                      ... Alternate Content ItemsSource and ttemContainerStyle
                  </DataTrigger>
              </Style.Triggers>
          ...

无论如何,这是一般性的想法,我相信你可以根据自己的特殊需求填写细节。 (即使用占位符文本定义禁用的子MenuItem)