我可能已经梦想到了,但我记得在某处读到可以使用缩放变换来更改边框的大小,并且有一个属性可以将边框宽度保持为使用之前的宽度比例(我可能梦想的是这个属性,而不是比例变换=P)。
因此,通常情况下,如果我有一个 BorderWidth 为 1 的边框,并且我将其缩放以使其变大,则 BorderWidth 将看起来像是 10 或其他值。我希望控件本身更大,但其边框保持 1 像素宽度。
有人知道怎么做吗?
谢谢!
最佳答案
当然,只需布局变换将零宽度边框缩放到您喜欢的任何大小,并将其包裹在一像素宽度的边框中即可。
<Grid>
<Border BorderThickness="1" BorderBrush="Black" HorizontalAlignment="Left" VerticalAlignment="Top">
<Border Height="100" Width="100">
<Border.LayoutTransform>
<ScaleTransform ScaleX="2" ScaleY="2"/>
</Border.LayoutTransform>
<TextBlock Text="Some text"/>
</Border>
</Border>
</Grid>
编辑:
好的,当缩放从外部传入时取两个。
这是一个小标记演示,其中 Canvas 正在转换并包含边框:
<Grid>
<Grid.Resources>
<local:DescalingConverter x:Key="descalingConverter"/>
</Grid.Resources>
<Canvas Name="canvas">
<Canvas.LayoutTransform>
<ScaleTransform ScaleX="2" ScaleY="2"/>
</Canvas.LayoutTransform>
<Border BorderThickness="{Binding ElementName=canvas, Converter={StaticResource descalingConverter}}"
BorderBrush="Black" Width="100" Height="100">
<TextBlock Text="Some text"/>
</Border>
</Canvas>
</Grid>
这是除垢转换器:
public class DescalingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var element = value as FrameworkElement;
var transform = element.LayoutTransform as ScaleTransform;
if (transform == null) return 1.0;
return 1.0 / transform.ScaleX;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
请注意,该转换器并不强大,仅用于演示目的。
关于wpf - 使用缩放变换时的边界保持比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750394/