繁体   English   中英

如何从 ControlTemplate 内部将 ColorBrush 绑定到 ControlTemplate 外部的自定义属性?

[英]How to bind ColorBrush from inside ControlTemplate to a custom property outside of ControlTemplate?

这种绑定让我发疯,尝试了来自 stackoverflow 的各种(甚至可能是相同的)解决方案。 我不明白为什么绑定不起作用......

问题:

我有一个带有 ControlTemplate 的样式,该样式应用于 GridViewColumnHeader。 这是带有 ControlTemplate 属性的样式:

    <Style x:Key="GridHeaderWithInkColor" TargetType="{x:Type GridViewColumnHeader}">
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
              <Border BorderThickness="0,0,0,1" BorderBrush="White">
                <StackPanel Margin="0,0,0,10" Orientation="Vertical">
                 <TextBlock Text="{TemplateBinding Content}" Padding="5" 
                                        Width="{TemplateBinding Width}" TextAlignment="Left"
                                                   FontSize="24" Foreground="White"/>
                <Rectangle Height="15" Width="70" Margin="10" RadiusX="5" RadiusY="5" StrokeThickness="2" Stroke="DarkGray" HorizontalAlignment="Center">
                  <Rectangle.Fill>
                    <SolidColorBrush Color="???????????????"/>                                                        
                  </Rectangle.Fill>
                </Rectangle>
             </StackPanel>
           </Border>
       </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

我在 GridViewHeaderColumn 中使用如下模板:

<GridViewColumn HeaderContainerStyle="{StaticResource GridHeaderWithInkColor}" local:ExtendedProps.InkColor="{Binding MachineInfo.BarColorsList[0]}"/>

local:ExtendedProps.InkColor是我自己定义的一个属性,以便能够在 xaml 中使用它。

**问题是:

  1. 如何在使用时将 ControlTemplate 内的 SolidColorBrush 绑定到 GridViewColumn 中的属性 local:ExtendedProps.InkColor。**

我尝试了这个(以及其他变体、模板绑定等),但没有运气:

<SolidColorBrush Color="{Binding DataContext.IsItemSelected,
                         RelativeSource={RelativeSource AncestorType=GridViewColumn}}"/>                                                        

可能让我生活困难的两件事是(我认为):

  • SolidColorBrush 嵌套在其他控件中。
  • 我尝试使用的属性是自定义属性(我确定它定义正确)。

如何在GridViewColumn时将ControlTemplate内的SolidColorBrush绑定到GridViewColumn中的属性local:ExtendedProps.InkColor

GridViewColumnHeader有一个Column属性,您可以使用它来绑定GridViewColumn的属性:

Color="{Binding Path=Column.(local:ExtendedProps.InkColor), 
    RelativeSource={RelativeSource AncestorType=GridViewColumnHeader}}"

该列不是标题的视觉祖先,因此使用{RelativeSource AncestorType=GridViewColumn}将不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM