我在WPF(C#)中有这个UserControl,它基本上是一个对话框。当您双击它时,它会变为“可编辑的”#34;。
该组件由显示文本的TextBlock组成,当您双击它时,它会消失'它并带来一个TextBox,您可以在其中编辑文本。
UserControl必须拥有一个定义'行间距'来自另一个UserControl的文本(如在Microsoft Word中),它传递的参数范围从0.5到3.0。 (与Microsoft Word相同的范围值)。
当你有一个'行间距'例如,1.5,文本显示如下:
...对于TextBox和TextBlock(我将Textblock.LineHeight属性与TextBox.TextBlock.LineHeight属性绑定在一起,因此它们共享相同的行间距)。
我可以使用基于我从其他UserControl捕获的行间距的简单填充来修复TextBlock中的文本,因此无论我应用的行间距如何,它都会在相同的起始位置显示文本(第一行必须始终如一)无论我使用哪一行间距,都处于同一位置。
问题:
如果我使用相同的解决方案'用于TextBlock的TextBox,它显示如下:
在这种情况下,我应用了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天,但还没有找到答案。