我正在使用一个必须支持多种分辨率的登录窗口。 在该窗口中,有一长行不同颜色的文本。
<TextBlock
Style="{StaticResource TextStyle}"
TextWrapping="Wrap" HorizontalAlignment="Center"
VerticalAlignment="Center"
TextAlignment="Center">
<Run
Text="{Binding MsgA}"
/>
<Run
Foreground="#FFFFFF"
FontFamily="{StaticResource CentralSansBook}"
Text="{Binding MsgB}"
/>
</TextBlock>
使用此代码,我得到: 在低分辨率下,因为我的宽度几乎是原来的一半,所以我会放弃漂亮的格式,只希望它适合,所以看起来像这样
This is message A.This is
message B
在高分辨率下,我希望它看起来像这样
This is message A.
This is message B
我不知道如何支持这两种行为。
答案 0 :(得分:0)
正如我所看到的,您只需要在第二条消息之前粘贴换行符即可获得高分辨率。因此,我将在View层使用值转换器进行操作:
public class NewLineInsCnv : IValueConverter
{
public bool InsertNewLine { get; set; } = IsHighResolution();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (InsertNewLine && value is string st)
{
return Environment.NewLine + st;
}
return value;
}
public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException("One way only conversion");
}
private static bool IsHighResolution()
{
return true;//Check
}
}
<TextBlock
Style="{StaticResource TextStyle}"
TextWrapping="Wrap" HorizontalAlignment="Center"
VerticalAlignment="Center"
TextAlignment="Center">
<TextBlock.Resources>
<local:NewLineInsCnv x:Key="insertNewLineCnv"/>
</TextBlock.Resources>
<Run
Text="{Binding MsgA}"
/>
<Run
Foreground="#FFFFFF"
FontFamily="{StaticResource CentralSansBook}"
Text="{Binding MsgB, Converter={StaticResource insertNewLineCnv}}"
/>
</TextBlock>
如有必要,可以将InsertNewLine
设置为依赖项属性。