【发布时间】:2023-03-19 23:39:01
【问题描述】:
对于 WPF 界面,我正在构建在标签旁边显示图标的用户控件。我在 Canvas 元素中构建图标,并将其粘贴在标签旁边的 DockPanel 中。我将它捆绑到一个 UserControl 中,以便整个控件可以绑定到单个值并重绘图标并在其更改时更新文本(想想电池表)。
我无法将图标的画布缩放到与标签文本大致相同的高度并将其大致定位在标签的基线上。有没有简单的方法可以做到这一点?如果我允许通过属性更改字体,我可以检查布局测量并相应地缩放/定位图标的画布吗?
作为参考,这里是电池表的 XAML,以及时钟和电池表的图像。请注意,电池表有点接近我想要的(在基线上,但不是文本的高度),但时钟太大了。
<UserControl x:Class="Controls.Battery"
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"
xmlns:controls="clr-namespace:Controls"
x:Name="Root"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="900">
<DockPanel DataContext="{Binding ElementName=Root}" LastChildFill="True" Height="200" Width="900">
<Canvas DockPanel.Dock="Left" Width="200" Height="200" Background="Transparent">
<Rectangle Width="180" Height="100" StrokeThickness="20" Canvas.Top="50" Stroke="White" RadiusX="5" RadiusY="5">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="White" Offset="{Binding Percent}"/>
<GradientStop Color="Transparent" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Width="40" Height="50" StrokeThickness="20" Canvas.Top="75" Canvas.Right="0" Stroke="White" RadiusX="5" RadiusY="5"/>
</Canvas>
<Viewbox HorizontalAlignment="Left">
<TextBlock Text="{Binding Percent, Converter={controls:PercentConverter}}" Foreground="White" />
</Viewbox>
</DockPanel>
【问题讨论】:
标签: c# wpf user-controls