1

有人可以告诉我为什么这个触发器不起作用:

<!--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;
        }

我尝试了其他方式,但没有成功。当扩展器被禁用时,有另一种方式来折叠内容。

4

3 回答 3

1

您需要将样式应用于扩展器,例如:

<Expander Header="Expander" Name="expander1" Style="{StaticResource Test}" >
...
</Expander>

如果您不想显式应用样式,则不要声明x:Key="Test",并且与该资源在同一范围内的所有扩展器(即,如果您在 中声明,则该特定页面中的所有扩展器x:Key="Test"<Page.Resources>将继承该样式。

于 2009-10-06T01:56:55.527 回答
0

谢谢,但我忘记了你提到的代码块。我在 Style 标签中放了一个引用,问题仍然存在。

于 2009-10-06T02:13:58.670 回答
0

问题是当用户点击扩展器时,设置了 IsExpanded “本地值”,它优先于触发器。有关依赖项属性值优先级的详细信息,请参阅此 msdn 页面

一种可能的解决方案是重写整个 Expander 控件模板,将触发器添加到模板的触发器中,如果IsEnabled为 false 则隐藏“扩展”区域(默认模板仅在IsExpanded为 false 时执行此操作)。您可以使用 Blend 获得默认模板,方法是在 Window 上添加扩展器,右键单击它并在上下文菜单中选择 Edit Template > Edit a copy。

于 2009-10-06T09:18:06.643 回答