将参数传递给模板

Rob*_*Dam 3 .net c# wpf xaml controltemplate

假设我已经定义了一个带圆角的按钮.

<Style x:Key="RoundButton" TargetType="Button">
    <!-- bla bla -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border CornerRadius="0,5,5,0" />
                <!-- bla bla -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

我可能这个按钮的用户可以指定CornerRadius吗?我可以使用TemplateBinding吗?但是我应该在哪里绑定?(标记?)

Tho*_*que 6

除了Kent的建议之外,您还可以创建一个附加属性来定义按钮上的CornerRadius,并绑定到模板中的该属性


Ken*_*art 5

为了使用TemplateBinding,模板化控件上必须有一个属性(Button在本例中为 )。Button没有CornerRadius或同等的财产,因此您的选择是:

  • 对模板中的值进行硬编码
  • 劫持另一个属性(例如Tag)来存储此信息。这更快,但缺乏类型安全性,更难维护,并且会阻止该属性的其他用途。
  • 子类化Button并添加所需的属性,然后为该子类提供模板。这需要更长的时间,但可以为您控制的消费者带来更好的体验。