6

我已经广泛搜索了这个问题的答案,但结果却很短。我在 Visual Studio 2015 中使用通用 Windows 10 (UWP) 和 C# 来构建一个基本的文本编辑器,以将 Notepad.exe 的功能镜像为实践,我遇到了一个恼人的显示问题/怪癖。

我有一个 2 行的网格。顶行是StackPanel带有按钮的水平行,底部是RichEditBox. 一切都显示得很好.. 除非RichEditBox有键盘焦点(我几乎确保总是如此)并且我垂直调整窗口大小,RichEditBox(及其绿色边框)调整大小与其 Grid 容器不同。当我拉下窗口以调整大小时,RichEditBox顶部和底部的“分离”边框并快速向上(和向下)滑动以填充网格。在这个过程中,当这个动画发生时,文本会抖动。注意:当我水平调整大小时不会发生这种情况。(下面的图片链接不会让我嵌入图片)

不需要的调整大小行为

这不是世界末日,但它看起来不专业,必须有一种RichEditBox垂直锚定的方法,所以它总是完全填满网格行,并且在我调整大小时不会从它的容器中拉开。我尝试了Grid.Row, theRichEditBox及其内置的所有属性ScrollViewer,我认为这些属性可能与此有关,但没有运气。使用VerticalAlignment = Top导致RichEditBox不再垂直填充网格行(当然,除非我用文本填充它)。我也把RichEditBoxa 放在里面ScrollViewer而不是使用它的内置ScrollViewer,它做了同样的行为。

这是我的 XAML:

 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Height="Auto" Grid.Row="0"  Background="Azure" AllowFocusOnInteraction="False">

        <Button x:Name="FileButton" Content="File" Click="MenuButtonClicked" Padding="3,1"  Background="Azure">
            <Button.Flyout>
                <MenuFlyout Placement="Bottom">
                    <MenuFlyoutItem Text="New" Click="NewClicked" />
                    <MenuFlyoutItem Text="Open..." Click="OpenClicked" />
                    <MenuFlyoutItem Text="Save" Click="SaveClicked" />
                    <MenuFlyoutItem Text="Save As..." Click="SaveAsClicked" />
                    <MenuFlyoutItem Text="Close" Click="CloseClicked" />
                    <MenuFlyoutSeparator/>
                    <MenuFlyoutItem Text="Exit" Click="ExitClicked" />
                </MenuFlyout>
            </Button.Flyout>
        </Button>

        <Button x:Name="EditButton" Content="Edit" Click="MenuButtonClicked" Padding="3,1"  Background="Azure">
            <Button.Flyout>
                <MenuFlyout Placement="Bottom">
                    <MenuFlyoutItem Text="Undo" Click="UndoClicked" />
                    <MenuFlyoutSeparator/>
                    <MenuFlyoutItem Text="Cut" Click="CutClicked" />
                    <MenuFlyoutItem Text="Copy" Click="CopyClicked" />
                    <MenuFlyoutItem Text="Paste" Click="PasteClicked" />
                    <MenuFlyoutItem Text="Clear" Click="ClearClicked" />
                    <MenuFlyoutSeparator/>
                    <MenuFlyoutItem Text="Date/Time" Click="DateTimeClicked" />
                    <MenuFlyoutItem Text="Select All" Click="SelectAllClicked" />
                </MenuFlyout>
            </Button.Flyout>
        </Button>

        <Button x:Name="FormatButton" Content="Format" Click="MenuButtonClicked" Padding="3,1"  Background="Azure">
            <Button.Flyout>
                <MenuFlyout Placement="Bottom">
                    <ToggleMenuFlyoutItem Text="Word Warp" Click="WordWrapToggled" IsChecked="True"/>
                </MenuFlyout>
            </Button.Flyout>
        </Button>

        <Button x:Name="HelpButton" Content="Help" Click="MenuButtonClicked" Padding="3,1" Background="Azure">
            <Button.Flyout>
                <MenuFlyout Placement="Bottom">
                    <MenuFlyoutItem Text="About" Click="AboutClicked" />
                </MenuFlyout>
            </Button.Flyout>
        </Button>
    </StackPanel>

    <RichEditBox x:Name="MainTextBox"

        FontFamily="Consolas" 
        FontSize="14" 
        Grid.Row="1"
        VerticalAlignment="Stretch"
        HorizontalAlignment="Stretch"

        IsSpellCheckEnabled="False" 
        BorderThickness="1" 
        TabIndex="0"

        ScrollViewer.IsVerticalRailEnabled="True"
        ScrollViewer.VerticalScrollMode="Auto"
        ScrollViewer.IsHorizontalRailEnabled="True"
        ScrollViewer.HorizontalScrollMode="Auto"

        KeyDown="TabKeyDown"
        Paste="ContentPasted"  />

</Grid>

有谁知道如何使它按照我想要的方式运行?

我很感激任何人都可以提供的任何帮助。

4

0 回答 0