自定义控件之间的WPF Stackpanel间距

时间:2015-11-30 11:31:32

标签: wpf custom-controls spacing stackpanel

如何在堆栈面板内的某些自定义控件之间获取空格?我之前使用文本框,按钮等执行此操作,但我无法使用自定义控件执行此操作。

这是我到目前为止的代码

<Grid>
    <StackPanel x:Name="spTasks" CanVerticallyScroll="True">
        <StackPanel.Resources>
            <Style TargetType="local:SmartTaskOverview">
                <Setter Property="Margin" Value="50,50,50,50" />
            </Style>
        </StackPanel.Resources>
    </StackPanel>

</Grid>

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

FrameworkElement及其子类不只是使用控件类型查找资源,而是使用DefaultStyleKey的值。对于大多数Control类(以及其他一些FrameworkElement s),通常的做法是将静态构造函数中此依赖项属性的默认值覆盖为控件的类型,但是{{1的子类通常不要打扰。

UserControl

如果您未在static Foo() { DefaultStyleKeyProperty.OverrideMetadata(typeof(Foo), new FrameworkPropertyMetadata(typeof(Foor)); } 中执行此操作,则会使用SmartTaskOverview作为资源键而不是typeof(UserControl)来查找其默认样式。

注意:typeof(SmartTaskOverview)将需要一个控件模板来显示其子项,这通常由UserControl的默认样式提供,但通过更改键,它将找到您的默认样式。要解决此问题,请将您的风格基于UserControl样式。

UserControl

或者您可以自己提供一个简单的模板。

<Style TargetType="local:SmartTaskOverview" BasedOn="{StaticResource {x:Type UserControl}}">
    <Setter Property="Margin" Value="50,50,50,50" />
</Style>