我试图弄清楚如何使用适当的对话单元(DLU)在WPF中布局一个简单的对话框.
什么是对话单元?
对话框是基于用户首选字体大小的度量单位.定义一个对话框单元,使得平均字符宽4个对话框单位,高8个对话框单位:
这意味着对话单元:
- 用所选字体更改
- 已选择DPI设置更改
- 不正方形
我花了大约两个小时从Windows Vista中使用各种dlu测量标注这个示例对话框.有人可以给出生成此对话框的相应XAML标记吗?
(图片链接)
现在我承认我对WPF XAML几乎一无所知.每次我开始,我都会受到阻碍,因为我无法弄清楚如何进行任何控制.似乎WPF中的所有内容都必须包含在某种面板中.有StackPanels,FlowPanels,DockPanel,Grid等.如果你没有这些,那么它将无法编译.
到目前为止,我唯一能够提出的XAML(uing XAMLPad):
<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image Width="23" />
<Label>Are you sure you want to move this file to the Recycle Bin?</Label>
<Image Width="60" />
<Label>117__6.jpg</Label>
<Label>Type: ACDSee JPG Image</Label>
<Label>Rating: Unrated</Label>
<Label>Dimensions: 1072 × 712</Label>
<Button Content="Yes" Width="50" Height="14"/>
<Button Content="Cancel" Width="50" Height="14"/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
这是一个华而不实的怪物.没有任何控件放置或尺寸正确.我无法弄清楚如何在窗口中定位控件,也无法正确调整它们的大小.
有人可以将该屏幕截图转换为XAML吗?
注意:您不能测量屏幕截图.指定了所有对话单位(dlu)的宽度和高度.
注意: 1个水平DLU!= 1个垂直DLU.水平和垂直DLU的大小不同.
我有一个小表单,显示一些进度信息.
很少我需要显示一个相当长的消息,我希望能够在需要时调整此表单的大小,以便此消息适合表单.
那么如何找出S字体中的字符串宽度F呢?
在WPF中,这可以使用FormattedText,如下所示:
private Size MeasureString(string candidate)
{
var formattedText = new FormattedText(
candidate,
CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
new Typeface(this.textBlock.FontFamily, this.textBlock.FontStyle, this.textBlock.FontWeight, this.textBlock.FontStretch),
this.textBlock.FontSize,
Brushes.Black);
return new Size(formattedText.Width, formattedText.Height);
}
Run Code Online (Sandbox Code Playgroud)
但是在UWP中,这个类不再存在了.那么如何在通用Windows平台中计算文本尺寸呢?
我想要一个包含以下文本的文本块:
My associated textbox is :
Run Code Online (Sandbox Code Playgroud)
文本左对齐,冒号右对齐.
我知道如何使用两个文本块获得上述输出.但我想知道适用于单个文本块的行为是否相同?
我会跳到追逐:有没有办法告诉WPF TextBlock自己测量它的大小在它改变时不会改变FontWeight?
我有一个TextBlock根据样式动态更改字体权重.该TextBlock是内部的RadioButton所以检查时,它是勇敢的,否则正常:
<Style x:Key="BoldWhenChecked" TargetType="RadioButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="TextElement.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style
Run Code Online (Sandbox Code Playgroud)
以下是单选按钮本身:
<StackPanel Orientation="Horizontal">
<RadioButton Style="{StaticResource BoldWhenChecked}">
<TextBlock Text="Item 1" />
</RadioButton>
<RadioButton Style="{StaticResource BoldWhenChecked}">
<TextBlock Text="Item 2" />
</RadioButton>
<RadioButton Style="{StaticResource BoldWhenChecked}">
<TextBlock Text="Item 3" />
</RadioButton>
etc...
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于我没有使用固定宽度的字体,TextBlock当字体重量改变时,改变的宽度,并且整个单选按钮面板相应地移动,这在视觉上是不和谐的.
我想设置 WPF 文本框的宽度,以便它有足够的空间容纳任何 5 位 TCP 端口号。它不应该更大,也不应该动态调整大小,即 Width="Auto" 不是我想要的。
我正在寻找一种通用的方法,即尊重所使用的字体的方法,并且我不想在字体或任何其他可能改变像素宽度 5 的情况下摆弄像素精确的宽度值数字 - 已更改。
我想通过 MeasureString 在代码中实现是可能的(虽然有点尴尬),但这在 XAML 中可能吗?