【问题标题】:Why template binded converter doesn't work?为什么模板绑定转换器不起作用?
【发布时间】:2022-11-24 21:25:01
【问题描述】:

我有带边框的控件模板。我想通过模板绑定来绑定这个背景,但我还需要在 SolidColorBrush 中创建一个“x:Name”属性。所以我制作了从画笔到颜色的简单转换器,但它不起作用。我不明白为什么

我的 Xaml:

<ControlTemplate TargetType="Button" x:Key="appBtns">
        <ControlTemplate.Resources>
            <local:ColorConverter x:Key="ColorConverter"/>
        </ControlTemplate.Resources>
        <Border x:Name="BackRect" CornerRadius="15" BorderThickness="0" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
            <Border.Background >
                <SolidColorBrush x:Name="BackRectColor" Color="{TemplateBinding Background, Converter={StaticResource ColorConverter}}"/>
            </Border.Background>
        </Border>
</ControlTemplate>

我的转换器

public class ColorConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((SolidColorBrush)value).Color;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
    }

【问题讨论】:

    标签: wpf


    【解决方案1】:

    众所周知,TemplateBinding 标记扩展在某些情况下非常有限。但是,您可以简单地使用带有 TemplatedParentRelativeSource 的常规绑定。

    <SolidColorBrush x:Name="BackRectColor" Color="{Binding Background, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ColorConverter}}"/>
    
    

    事实上,如果你总是使用SolidColorBrush,你甚至不需要转换器。

    <ControlTemplate TargetType="Button" x:Key="appBtns">
       <Border x:Name="BackRect" CornerRadius="15" BorderThickness="0" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
          <Border.Background >
             <SolidColorBrush x:Name="BackRectColor" Color="{Binding Background.Color, RelativeSource={RelativeSource TemplatedParent}}"/>
          </Border.Background>
       </Border>
    </ControlTemplate>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多