我可能已经梦想过了,但我记得在某处我读到可以使用缩放变换来改变边框的大小,并且有一个属性可以保持边框宽度与使用前的宽度相同比例(我可能梦想的是这个属性,而不是比例变换= P)。
所以,通常情况下,如果我有一个BorderWidth为1的边框,并且我将其缩放以使其更大,则BorderWidth看起来像是10或者其他东西。我希望控件本身更大,但它的边框保持1像素宽度。
任何人都知道怎么做?
谢谢!
答案 0 :(得分:3)
当然,只需布局转换,将零宽度边框缩放到您喜欢的任何尺寸,并将其包裹在一个像素宽的边框中。
<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>
修改强>
好的,当外部进行缩放时,取两个。
这是一个小标记演示,其中一个画布正在被转换并包含一个边框:
<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();
}
}
请注意,转换器不健壮,仅用于演示目的。