TextBlock
元素可以很好地处理LineHeight
,允许文本完全显示,而不会剪切。但是,我想将其更改为TextBox
以便于编辑文本,这就是我的麻烦开始的地方。
TextBlock
显示如下文字:
TextBox
显示如下文字:
我试图摆弄ClipToBounds
和Clip
属性,但它只在元素中剪辑,不会超出边界。
LineHeight
属性需要设置为低以调节线之间的差距,因此不能选择更改。
我也尝试了Padding
,但它只做了这个
如果这是唯一的解决方案,我会不按自己的方式听取按键并相应地更改文本,但这似乎是很多工作,我不认为这是一个很好的解决方案,所以这是我的简明问题:
如果可能TextBox
TextBlock
与private static Style GetFontTextBlock()
{
var style = new Style();
style.Setters.Add(new Setter(TextBlock.LineStackingStrategyProperty, LineStackingStrategy.BlockLineHeight));
style.Setters.Add(new Setter(TextBlock.IsHyphenationEnabledProperty, true));
style.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap));
style.Setters.Add(new Setter(Control.BorderBrushProperty, null));
return style;
}
public static Style GetHeadline()
{
// ApplyFont sets the Control.FontFamilyProperty to Geogrotesque Condensed Regular.
// It's a purchased font so I can't supply it, unfortunately
var style = ApplyFont(new Style { BasedOn = GetFontTextBlock() });
style.Setters.Add(new Setter(TextBlock.FontSizeProperty, 140));
style.Setters.Add(new Setter(TextBlock.LineHeightProperty, 112));
return style;
}
相同,则如何使UserControl
无法剪切文字?
<小时/> 更新以下是样式代码(我目前拥有的代码)及其应用位置。
<Grid>
...
<StackPanel>
<TextBox Background="Cornsilk" Name="Headline" AcceptsReturn="True" />
...
</StackPanel>
...
</Grid>
它适用于public static Style GetHeadline(Enums.Enums.SheetSizes size, object triggerTarget)
[...]
style.Setters.Add(new Setter(TextBox.TemplateProperty, XamlReader.Parse(
// Breaks and indentation for readability
@"<ControlTemplate TargetType='TextBox'
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
<DockPanel>
<Decorator Name='PART_ContentHost' />
</DockPanel>
</ControlTemplate>")));
return style;
}
foreach ($posts as $post) {
$json[] = [
'img_url' => "mysite.com/images/content/" . $post->imgUrl,
];
}
<小时/> 的更新 根据Cadogis的回答,样式设定器代码结果如下:
'gallery' => foreach ($post->gallery->galleryMedia as $mediaItem) { $mediaItem->imgUrl }
产生了非常理想的结果
感谢你们两位帮助我!
答案 0 :(得分:3)
我可能在这里遗漏了一些东西但是在调用你的文本框时,你可以设置高度和宽度的最小值和最大值,然后将它们设置为自动例如。
<TextBox Text="Test
test" Style="{StaticResource HeadlineFontTextBoxStyle}"
AcceptsReturn="True" Height="Auto" MinHeight="24" MaxHeight="120" />
我应该指出,在堆叠面板中使用它会限制高度默认,使用网格会给你最好的结果,因为它会动态扩展。
显然你不希望控件无限期地扩展,所以如果它变得太大,max属性将统治它,但是“Auto”应该允许它正确地调整大小。对不起,如果我完全错过了这一点。
模板构思
不确定这是否是你想要的,但它是一个修改过的模板,文本框要在边框外渲染(它使用装饰器而不是滚动查看器) - 想想我应该尝试给出一个可能的选项工作
<UserControl x:Class="UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="FontTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="TextBlock.LineStackingStrategy" Value="BlockLineHeight"></Setter>
<Setter Property="TextBlock.IsHyphenationEnabled" Value="True"></Setter>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
<Setter Property="Control.BorderBrush" Value="{x:Null}"></Setter>
</Style>
<Style x:Key="HeadlineFontTextBoxStyle" TargetType="{x:Type TextBox}" >
<Setter Property="TextBlock.LineHeight" Value="100"></Setter>
<Setter Property="TextBlock.LineStackingStrategy" Value="BlockLineHeight"/>
<Setter Property="FontSize" Value="140"></Setter>
<Setter Property="AcceptsReturn" Value="True" />
<Setter Property="Height" Value="Auto"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<DockPanel>
<Decorator Name="PART_ContentHost" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<TextBox Text="Test
test" Style="{StaticResource HeadlineFontTextBoxStyle}" TextChanged="TextBox_TextChanged" />
</Grid>
作为参考,您可能希望从MSDN查看此内容: https://msdn.microsoft.com/en-us/library/ms752068%28v=vs.85%29.aspx
答案 1 :(得分:2)
我尝试了你的设置(用xaml中的样式重写)和TextBlock,我看到了和你一样的显示。但是使用TextBox,字母完全可见,没有任何内容被剪裁。
<UserControl x:Class="WpfApplication2.UserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="FontTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="TextBlock.LineStackingStrategy" Value="BlockLineHeight"></Setter>
<Setter Property="TextBlock.IsHyphenationEnabled" Value="True"> </Setter>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
<Setter Property="Control.BorderBrush" Value="{x:Null}"></Setter>
</Style>
<Style x:Key="HeadlineFontTextBoxStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource FontTextBoxStyle}">
<Setter Property="TextBlock.LineHeight" Value="122"></Setter>
<Setter Property="FontSize" Value="140"></Setter>
</Style>
</UserControl.Resources>
<StackPanel>
<TextBox Text="Testtest" Style="{StaticResource HeadlineFontTextBoxStyle}" />
</StackPanel>
</UserControl>