我的菜单显示在屏幕的左上角

时间:2016-03-13 17:42:54

标签: c# .net wpf

我使用WPF中的菜单控件构建了一个菜单栏,它已经工作但是在某些时候菜单开始出现在我的第一台显示器的左上角,无论屏幕在哪里,我都有窗口。即使我将主窗口移动到第二个监视器,菜单仍会显示在第一个监视器中。

Menu Image

以下是菜单控件的代码:

<Menu>
    <MenuItem Header="_File">
        <MenuItem Header="_New" Command="New" InputGestureText="Ctrl+N"/>
        <MenuItem Header="_Open" Command="Open" InputGestureText="Ctrl+O" />
        <MenuItem Header="_Close" Command="Close" InputGestureText="Ctrl+W" />
        <Separator/>
        <MenuItem Header="_Save" Command="Save" InputGestureText="Ctrl+S" />
        <MenuItem Header="Save _As" Command="SaveAs" InputGestureText="Ctrl+Shift+S" />
        <Separator/>
        <MenuItem Header="E_xit" Command="{StaticResource CommandBinding_Exit}" InputGestureText="Ctrl+Q" />
    </MenuItem>
    <MenuItem Header="_Edit">
        <MenuItem Header="_Add" Command="{StaticResource CommandBinding_Add}" InputGestureText="" />
        <MenuItem Header="_Edit" Command="{StaticResource CommandBinding_Edit}" InputGestureText="" />
        <MenuItem Header="_Delete" Command="Delete" InputGestureText="" />
        <Separator/>
        <MenuItem Header="Cut" Command="Cut" InputGestureText="Ctrl+X" />
        <MenuItem Header="Copy" Command="Copy" InputGestureText="Ctrl+C" />
        <MenuItem Header="Paste" Command="Paste" InputGestureText="Ctrl+V" />
    </MenuItem>
    <MenuItem Header="_View">
        <MenuItem x:Name="miShowStatusBar" Header="Show Status Bar" IsCheckable="True" IsChecked="True" Click="miShowStatusBar_Click"/>
        <MenuItem x:Name="miShowFullPath" Header="Show Full Path" IsCheckable="True" IsChecked="True" Click="miShowFullPath_Click"/>
    </MenuItem>
    <MenuItem Header="_Help">
        <MenuItem Header="_About"/>
    </MenuItem>
</Menu>

在后面的代码中没有引用任何菜单,所以我无法弄清楚可能导致这个奇怪菜单放置的原因。

3 个答案:

答案 0 :(得分:1)

我认为 OP 问题的根源在 MenuBar 下的搜索框中。它可能来自搜索框的边距或宽度设置。

我遇到了同样的问题并找到了来源。这是重现相同错误的样板代码。问题是 5 个部分的组合,如下面的 XAML 所示。删除其中任何一个都可以解决 OP 的问题。

您需要将 XAML 视图绑定到具有公共属性 Films 的 ViewModel。如果 Films 集合中有任何元素,它也会导致问题(第 5 部分)。

    <Grid x:Name="MainContent">
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid >
        <Menu>
            <MenuItem Header="Film">
                <MenuItem Header="New"/>
            </MenuItem>
        </Menu>
    </Grid>
    <Grid Grid.Row="1">
        <Grid>
            <!--Part 1: Remove HorizontalScrollBarVisibility="Auto"-->
            <ScrollViewer HorizontalScrollBarVisibility="Auto">
                <!--Part 2: Remove ItemsSource="{Binding Films}"-->
                <ItemsControl ItemsSource="{Binding Films}">
                    <ItemsControl.ItemContainerStyle>
                        <Style TargetType="ContentPresenter">
                            <!--Part 3: Remove the setter tag-->
                            <Setter Property="Margin" Value="2" />
                        </Style>
                    </ItemsControl.ItemContainerStyle>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Button>
                                <Button.Template>
                                    <ControlTemplate TargetType="Button">
                                        <!--Part 4: Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=ActualWidth}-->
                                        <ContentPresenter Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=ActualWidth}"/>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </ScrollViewer>
        </Grid>
    </Grid>
</Grid>

答案 1 :(得分:0)

这与WPF无关。如果您有触摸屏显示器,平板电脑或平板电脑附带坏驱动程序(如Wacom绘图板),则可能会损坏Handedness设置或驱动程序问题。

运行对话框中输入此内容:shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}。 一旦平板电脑设置出现,请转到其他标签,然后在用户身份部分中,查看左手选项。

答案 2 :(得分:0)

我敢打赌,这与Visual Studio实例的Xaml-Designer有关。我遇到类似的奇怪事情,因为在调试时让Xaml-Designer保持打开状态。

尝试终止XDesProc.exe进程并检查问题是否仍然存在。