绑定标题文本块isEnabled到父Groupbox isEnabled

时间:2016-08-02 04:49:13

标签: wpf data-binding

参考这个问题:WPF Databinding: How do I access the "parent" data context?

我想做类似的事情,但是对于Groupbox的标题(因为标题与Box无关,因此被禁用,因此总是黑色,而其余部分是浅灰色。如果全部这对我来说有点奇怪盒子的内容是灰色的,上面是灰色的,但是盒子标题本身保持黑色。

所以我尝试使用flq链接问题中提到的方法简单地将标题文本块的isEnabled属性绑定到groupbox的isEnabled属性,但似乎我的绑定在某些时候失败了,我不会'我知道确切的地点和原因。

继承我当前的代码:

<GroupBox Header="Change Steps" Grid.Row="2" Grid.ColumnSpan="3" Name="gbChangeSteps">
     <GroupBox.Style>
          <Style TargetType="GroupBox">
              <Setter Property="HeaderTemplate">
                  <Setter.Value>
                      <DataTemplate>
                          <TextBlock Text="{Binding}" FontWeight="Bold" Height="19" Foreground="Black" IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=isEnabled}"/>
                      </DataTemplate>
                  </Setter.Value>
              </Setter>
          </Style>
      </GroupBox.Style>
<!-- ... (some non relevant Content)-->
</GroupBox>

1 个答案:

答案 0 :(得分:0)

经过额外的研究后,我找到了帖子Disable groupBox including the groupBox name in WPF 引导我,结合Properties-&gt;创建数据绑定 - &gt;绑定类型 - &gt; UIElement来解决这两个问题的解决方案,这个问题是关于这个问题的原因和导致整个重新定位的原始问题,这就是那个字母就像小g在标题中搞砸了一样。 这是解决问题的代码:

<GroupBox.Style>
   <Style TargetType="{x:Type GroupBox}">
       <Setter Property="HeaderTemplate">
          <Setter.Value>
               <DataTemplate>
                   <TextBlock Text="{Binding}" FontWeight="Bold" Height="19" IsEnabled="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UIElement}}}">
                       <TextBlock.Style>
                           <Style>
                               <Style.Triggers>
                                   <Trigger Property="Control.IsEnabled" Value="False">
                                       <Setter Property="Control.Foreground" Value ="#FF6D6D6D" />
                                   </Trigger>
                               </Style.Triggers>    
                           </Style>
                      </TextBlock.Style>
                   </TextBlock>
               </DataTemplate>
           </Setter.Value>
       </Setter>
     </Style>
</GroupBox.Style>