菜单和滚动条

时间:2013-05-23 20:36:43

标签: c# wpf xaml

我正在尝试创建一个菜单,其中包含使用滚动条或ScrollViewer显示的MenuItem。我在菜单中显示了很多项目,我只想显示其中的一些项目,让用户向下滚动查看其他项目。它看起来像ListBox,但它在菜单中。我已经尝试将一个列表框添加到菜单中。有用;但是看起来很丑陋而且它有问题所以,我想我会用MenuItems重新做它。我没有在互联网上找到任何重要的东西,所以我想我会问。我已经完成了一些代码;但它不起作用:

        <Menu>
            <MenuItem Width="80" Header="Test">
                    <MenuItem Header="Test2">
            </MenuItem>

            <Separator></Separator>
            <!--<ScrollViewer>-->
                <MenuItem Header="Test3">
                    <!--<ScrollBar></ScrollBar>-->
                        <MenuItem Header="Test4"></MenuItem>
                        <MenuItem Header="Test5"></MenuItem>
                        <MenuItem Header="Test6"></MenuItem>
                        <MenuItem Header="Test7"></MenuItem>
                </MenuItem>                        
             <!--</ScrollViewer>-->

            </MenuItem>
        </Menu>

滚动查看器和滚动条被注释掉,但是在取消注释它们时,滚动条的情况下会出现错误,滚动条的情况下,菜单项顶部会出现滚动条。任何想法,文章,代码等将不胜感激。

1 个答案:

答案 0 :(得分:2)

<Menu>
        <MenuItem Width="80" Header="Test">
            <MenuItem Header="A"/>
            <Separator></Separator>
            <MenuItem Header="B">
                <ScrollViewer VerticalScrollBarVisibility="Visible" Height="100">
                    <StackPanel>
                        <MenuItem Header="B1"></MenuItem>
                        <MenuItem Header="B2"></MenuItem>
                        <MenuItem Header="B3"></MenuItem>
                        <MenuItem Header="B4"></MenuItem>
                        <MenuItem Header="B5"></MenuItem>
                        <MenuItem Header="B6"></MenuItem>
                        <MenuItem Header="B7"></MenuItem>
                        <MenuItem Header="B8"></MenuItem>
                        <MenuItem Header="B9"></MenuItem>
                        <MenuItem Header="B10"></MenuItem>
                        <MenuItem Header="B11"></MenuItem>
                        <MenuItem Header="B12"></MenuItem>
                        <MenuItem Header="B13"></MenuItem>
                        <MenuItem Header="B14"></MenuItem>
                        <MenuItem Header="B15"></MenuItem>
                        <MenuItem Header="B16"></MenuItem>
                    </StackPanel>
                </ScrollViewer>
                </MenuItem>
                <MenuItem Header="C">
                <ScrollViewer VerticalScrollBarVisibility="Visible" Height="100">
                    <StackPanel>
                        <MenuItem Header="C1"></MenuItem>
                        <MenuItem Header="C2"></MenuItem>
                        <MenuItem Header="C3"></MenuItem>
                        <MenuItem Header="C4"></MenuItem>
                        <MenuItem Header="C5"></MenuItem>
                        <MenuItem Header="C6"></MenuItem>
                        <MenuItem Header="C7"></MenuItem>
                        <MenuItem Header="C8"></MenuItem>
                        <MenuItem Header="C9"></MenuItem>
                        <MenuItem Header="C10"></MenuItem>
                        <MenuItem Header="C11"></MenuItem>
                        <MenuItem Header="C12"></MenuItem>
                        <MenuItem Header="C13"></MenuItem>
                        <MenuItem Header="C14"></MenuItem>
                        <MenuItem Header="C15"></MenuItem>
                        <MenuItem Header="C16"></MenuItem>
                    </StackPanel>
                </ScrollViewer>
            </MenuItem>
            <MenuItem Header="D"/>
            <MenuItem Header="F"/>
            <MenuItem Header="G"/>
            <MenuItem Header="H"/>
            <MenuItem Header="I"/>
            <MenuItem Header="J"/>
            <MenuItem Header="K"/>

        </MenuItem>
    </Menu>

或者你可以在风格中设置一些内容......但是你必须知道你需要多少菜单项...所以我真的不太关心它的风格(至少这一个)是不是一般用途。但也许这会给你其他想法或让你开始。

<Style x:Key="MenuWithScroll"  TargetType="{x:Type MenuItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <MenuItem Header="B">
                        <ScrollViewer VerticalScrollBarVisibility="Visible">
                            <StackPanel>
                                <MenuItem Header="{Binding title1}"/>
                                <MenuItem Header="{Binding title2}"/>
                                <MenuItem Header="{Binding title3}"/>
                                <MenuItem Header="{Binding title4}"/>
                                <MenuItem Header="{Binding title5}"/>
                            </StackPanel>
                        </ScrollViewer>
                    </MenuItem>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>