Restyling只是wpf控件的一部分。可能吗?

时间:2009-06-25 09:29:03

标签: .net wpf wpf-controls styles controltemplate

我想重新设计WPF控件的一部分。

(具体来说,我想让ScrollBar上的滚动按钮更大)

现在我可以做到这一点没问题。我提取了默认样式。进行了必要的调整,并在我的应用程序中包含了修改后的样式。

问题是我必须在替换样式中包含整个控件模板,而我所有的变化都是2个值。

  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate TargetType="ScrollBar">
        <Grid Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True">
          <Grid.ColumnDefinitions>
            <ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
            <ColumnDefinition Width="1E-05*" />
            <ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
          </... etc

我只想将列定义的MaxWidth更改为50。

所以我的问题是:有什么办法可以对模板进行调整,而不必包含其他所有内容吗?我仍然希望控件模板的所有其他部分都像默认设置一样工作。

1 个答案:

答案 0 :(得分:4)

在这种情况下,您应该能够,因为模板伸出并从资源中获取值:

<ScrollBar xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ScrollBar.Resources>
        <sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}">50</sys:Double>
    </ScrollBar.Resources>
</ScrollBar>

如果模板对该值进行了硬编码,那么您将失去运气。