wpf - 使用缩放变换时的边界保持比例

标签 wpf

我可能已经梦想到了,但我记得在某处读到可以使用缩放变换来更改边框的大小,并且有一个属性可以将边框宽度保持为使用之前的宽度比例(我可能梦想的是这个属性,而不是比例变换=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/

相关文章:

c# - Wpf 自定义窗口,Windows 边缘调整大小功能

c# - CollectionViewSource 实时排序不起作用

c# - 在 ListView 中过滤数据 [mvvm]

c# - 作为资源的 URI

.net - Keyboard.Focus(item) 和 item.Focus() 有什么区别?

wpf - 我的 WPF 应用程序中的复选框宽度在 XP 和 Win7 之间为何不同?

c# - 禁用基于绑定(bind)值 WPF 的 ListBox 项的选择

c# - 像向导一样的 MVVM

c# - 模型列表<T> 和 ViewModel ObservableCollection<T> 重复数据?

C# WPF 移动窗口