WPF- TextBox中的第一行得到"切断",为什么?

时间:2014-04-30 22:18:21

标签: c# wpf xaml textbox textblock

我在WPF(C#)中有这个UserControl,它基本上是一个对话框。当您双击它时,它会变为“可编辑的”#34;。

该组件由显示文本的TextBlock组成,当您双击它时,它会消失'它并带来一个TextBox,您可以在其中编辑文本。

UserControl必须拥有一个定义'行间距'来自另一个UserControl的文本(如在Microsoft Word中),它传递的参数范围从0.5到3.0。 (与Microsoft Word相同的范围值)。

当你有一个'行间距'例如,1.5,文本显示如下:

enter image description here

...对于TextBox和TextBlock(我将Textblock.LineHeight属性与TextBox.TextBlock.LineHeight属性绑定在一起,因此它们共享相同的行间距)。

我可以使用基于我从其他UserControl捕获的行间距的简单填充来修复TextBlock中的文本,因此无论我应用的行间距如何,它都会在相同的起始位置显示文本(第一行必须始终如一)无论我使用哪一行间距,都处于同一位置。

问题:

如果我使用相同的解决方案'用于TextBlock的TextBox,它显示如下:

enter image description here

在这种情况下,我应用了0.5的行距并且填充了文本,但是所述文本的顶部(被边界吞噬的部分)不可见(好像在它前面有某种矩形)。我尝试用上述结果移动Padding和Margin。

我不能使用RichTextBox,所以这样的解决方案已不在考虑之列。

我也尝试过风格,但我仍然无法找到第一行的顶部如何回来的答案。

我认为任何代码都不是真正必要的,但是,这里是:

  • XAML:

        <StackPanel x:Name="TextContainer" MouseDown="changeTextBox" Margin="15" ClipToBounds="True">
            <TextBlock x:Name="TextDisplay" ClipToBounds="True"
                       ...
                       TextTrimming="CharacterEllipsis" 
                       Padding="3,1,0,0" 
                       LineStackingStrategy="BlockLineHeight" />
    
                <TextBox x:Name="TextEdit" Background="{x:Null}"
                     ...
                     Visibility="Collapsed"
                     TextBlock.LineStackingStrategy="BlockLineHeight"
                     TextBlock.LineHeight="{Binding ElementName=TextDisplay, Path=LineHeight}">
                </TextBox>
        </StackPanel>
    
  • SetSpacing方法(C#)

        private void setSpacing(DialogShapeCanvasElement x){
    
        double y = x.TextFontSpace;
        if (y < 0.5) y = 0.5;
        double w = y;
    
        FontFamily fontFamily = (FontFamily)x.GetValue(TextFontProperty);
        double fontDpiSize = (double)x.GetValue(TextFontSizeProperty);
    
        FontStyle fontStyle = (FontStyle)x.GetValue(TextFontStyleProperty);
        FontWeight fontWeight = (FontWeight)x.GetValue(TextFontWeightProperty);
    
        if (fontFamily == null) fontFamily = TextDisplay.FontFamily;
    
        double fontHeight = (fontDpiSize * fontFamily.LineSpacing);
    
        y = y * fontHeight;
        x.TextDisplay.LineHeight = Math.Ceiling(y / 1.8);
    
        if (w == 0.5)      { x.TextDisplay.Padding = new Thickness(3, 30, 0, 0); }
        else if (w == 1.0) { x.TextDisplay.Padding = new Thickness(3, 20, 0, 0); }
        else if (w == 1.5) { x.TextDisplay.Padding = new Thickness(3, 10, 0, 0); }
        else if (w == 2.0) { x.TextDisplay.Padding = new Thickness(3,  1, 0, 0); }
    
    }
    

提前致谢。希望有人可以帮助我,我已经搜索了3天,但还没有找到答案。

0 个答案:

没有答案