当然,只是layout-transform将一个零宽度的边框缩放为任意大小,然后用一个像素宽度的边框包裹起来。
<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>
编辑:
OK,采取两种当缩放外部进来的。
这里是用帆布一点标记演示所转化含边界:
<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();
}
}
注意,转换器不稳健并且只是出于演示的目的。
这是一个有趣的方法。它可以工作,但问题是我的边框位于画布内部,并且正在转换的是画布,因此,将1个厚度边框放在边框外部会产生相同的结果。也许我应该已经具体说明了这一点。感谢您的建议! – Carlo 2011-04-21 22:48:19
为您的情况添加了一种方法。 – 2011-04-21 23:22:44
哈哈真好!我会在接下来的一小时内尝试并回复你。谢谢! – Carlo 2011-04-22 00:10:17