gpt4 book ai didi

WPF将ControlTemplate的内容绑定(bind)到Control中的Property?

转载 作者:行者123 更新时间:2023-12-03 03:32:28 25 4
gpt4 key购买 nike

我想将按钮 ControlTemplate 中的 Border.Background 绑定(bind)到按钮的背景属性。通常我会使用 TemplateBinding:

  <Style TargetType="Button" x:Key="ColuredButton">
<Setter Property="Background" Value="LightGreen"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Border" CornerRadius="2" BorderThickness="1" BorderBrush="Gray">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="{TemplateBinding Foreground}"/>
<GradientStop Color="{TemplateBinding Background}"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

但我收到错误:“如果不在模板中,则无法设置 TemplateBinding”..但我在模板中! (如果我不使用 LinearGradientBrush 并将边框 Backround 属性直接绑定(bind)到 {TemplateBinding Background},它就可以工作......

最佳答案

正如@Snowbear所说,您应该将Color绑定(bind)到Color,而不是将Color绑定(bind)到Brush。但在他的解决方案中,不允许具有深层属性 Path(例如 Foreground.Color)的 TemplateBinding 作为绑定(bind)标记的一部分。

所以使用以下...

    <Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="{Binding Foreground.Color,
RelativeSource={RelativeSource TemplatedParent}}"
Offset="0.2"/>
<GradientStop Color="{Binding Background.Color,
RelativeSource={RelativeSource TemplatedParent}}"
Offset="0.6"/>
</LinearGradientBrush>
</Border.Background>

它应该可以工作。

关于WPF将ControlTemplate的内容绑定(bind)到Control中的Property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com