调整 XAML 属性大小

3
有没有一种方法可以使XAML属性随其所属的UI元素的大小而缩放?
实际上,我创建了一个控件模板,它太大了,不能很好地使用,主要是因为我想使用相同的控件来适应不同的大小。问题在于我可以将控件大小设置为Auto(在ControlTemplate中),但是内部模板元素的属性不会被调整大小:例如,StrokeThickness保持在10而不是变成1。
当我在模板上应用ScaleTransform时,它可以正常工作,但是当实际使用时,结果是一个太小的控件:宽度/高度=Auto将控件调整为正确的大小,然后才应用ScaleTransform。 因此,我得到了一种无法缩放的控件。
由于我对WPF还比较新,所以可能有一种简单的方法来解决这个问题...
3个回答

4

您的描述有点模糊,但听起来您需要将Stretch设置为Uniform的ViewBox作为控件的根元素。


1
你可以尝试在运行时将模板中控件的宽度和高度绑定到模板控件本身的宽度和高度上。类似这样的代码:
<Button>
    <Button.Template>
        <ControlTemplate TargetType={x:Type Button}>
            <Border Width="{TemplateBinding Property=ActualWidth}"
                    Height="{TemplateBinding Property=ActualHeight}">
                <ContentPresenter />
             </Border>
         </ControlTemplate>
    </Button.Template>
</Button>

请注意,绑定源是模板控件的 FrameworkElement.ActualWidthFrameworkElement.ActualHeight 属性。这些属性包含控件渲染后的宽度和高度,可能与 WidthHeight 属性中指定的值不同。这是因为这些值最终在运行时计算,考虑到可视树中任何父控件的大小。

0

很遗憾,您无法为StackPanel、DockPanel、Grid或任何其他容器创建控件模板。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接