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