有人能告诉我为什么这个触发器不起作用:
<!--Style-->
<Style x:Key="Test" TargetType="{x:Type Expander}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="IsExpanded" Value="false"></Setter>
</Trigger>
</Style.Triggers>
</Style>
<!-- Syle applyed in expander -->
<Expander Header="Expander" Margin="40,89,118,0" Name="expander1" Height="23" VerticalAlignment="Top" >
<Grid>
<Ellipse Height="100" Margin="86,0,-8,-58" Name="ellipse1" Stroke="Black" VerticalAlignment="Bottom" />
</Grid>
</Expander>
<!-- Code Behind -->
private void button1_Click(object sender, RoutedEventArgs e)
{
this.expander1.IsEnabled = false;
}我试过其他的方法,但都没有成功。当扩展器被禁用时,有另一种方法来折叠内容。
发布于 2009-10-06 01:56:56
您需要将样式应用于Expander,如下所示:
<Expander Header="Expander" Name="expander1" Style="{StaticResource Test}" >
...
</Expander>如果您不想显式地应用样式,那么不要声明x:Key="Test",并且与该资源相同作用域中的所有扩展器(即,如果在<Page.Resources>中声明为x:Key="Test",则该特定页面中的所有扩展器)都将继承该样式。
发布于 2009-10-06 02:13:59
谢谢,但是我忘记了你提到的代码块。我在Style标签中添加了一个引用,问题仍然存在。
发布于 2009-10-06 09:18:07
问题是,当用户单击扩展器时,会设置IsExpanded "local value“,该值优先于触发器。有关依赖项属性值优先级的详细信息,请参见this msdn page。
一种可能的解决方案是重写整个Expander控件模板,在模板的触发器中添加一个触发器,以便在IsEnabled为false时隐藏“扩展”区域(默认模板仅在IsExpanded为false时执行此操作)。您可以使用Blend获得默认模板,方法是在窗口上添加一个扩展器,右键单击它,然后在上下文菜单中选择Edit template > Edit a copy。
https://stackoverflow.com/questions/1523252
复制相似问题