WPF Expander标头,带有应始终启用的按钮

WPF Expander标头,带有应始终启用的按钮,wpf,expander,Wpf,Expander,我想有一个扩展器是禁用时,没有内容显示在扩展的内容区域,但在同一时间,我想有按钮在标题中,始终启用 下面的XAML不工作,因为扩展器被禁用,然后按钮也被禁用。因此,似乎有什么(默认样式)正在覆盖我对按钮的IsEnabled设置 <Expander IsEnabled="False" IsExpanded="False"> <Expander.Header> <StackPanel Orientation="Horizontal">

我想有一个扩展器是禁用时,没有内容显示在扩展的内容区域,但在同一时间,我想有按钮在标题中,始终启用

下面的XAML不工作,因为扩展器被禁用,然后按钮也被禁用。因此,似乎有什么(默认样式)正在覆盖我对按钮的IsEnabled设置

<Expander
   IsEnabled="False"
   IsExpanded="False">
   <Expander.Header>
     <StackPanel Orientation="Horizontal">
       <TextBlock>Short header text</TextBlock>
       <Button Content="Always enabled" IsEnabled="True" />
     </StackPanel>
  </Expander.Header>
  <TextBlock Text="Not to be seen by the user, as the expander should be disabled to expand" />
</Expander>

短标题文本
结果:

通缉结果:

不知何故,在stackpanel、textblock和标题中的按钮上,IsEnabled似乎总是设置为False。我曾尝试使用with成功地更改标题的背景(变为红色),但该按钮仍然未启用

<DataTemplate x:Key="StretchableExpanderHeader">
  <Grid x:Name="Grid">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <StackPanel x:Name="StackPanel">
      <ContentPresenter Content="{Binding}" x:Name="ContentPresenter"/>
    </StackPanel>
  </Grid>
  <DataTemplate.Triggers>
    <Trigger SourceName="Grid" Property="IsEnabled" Value="False">
      <Setter TargetName="ContentPresenter" Property="IsEnabled" Value="True" />
      <Setter TargetName="ContentPresenter" Property="Background" Value="Red" />
    </Trigger>
  </DataTemplate.Triggers>
</DataTemplate>


有没有办法在不完全重新设置扩展器样式的情况下启用按钮?最好是我希望任何人都能够风格,因为他们想要的,但按钮不应该在标题影响

您可以使用MVVM,并将IsEnabled属性绑定到模型。这看起来很难,但以后会变得更容易。re:Tony,我的代码使用的是MVVM,上面的代码只是一个示例,说明了为了保持简单,模型将向视图提供什么。问题不在于模型为按钮的IsEnable生成false,而在于某些样式将覆盖按钮的本地值。