繁体   English   中英

WPF样式触发

[英]WPF Style.Trigger

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

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

我以其他方式尝试,但未成功。.禁用扩展器时,还有另一种折叠内容的方法。

您需要将样式应用于Expander,如下所示:

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

如果您不想显式应用样式,则不要声明x:Key="Test" ,也不要声明与该资源在同一范围内的所有Expander(即,如果您声明x:Key="Test" <Page.Resources> x:Key="Test"将继承该样式。

谢谢,但是我忘记了您提到的代码块。 我在样式标签中添加了参考,问题仍然存在。

问题是,当用户单击扩展器时,将设置IsExpanded“本地值”,该优先级高于触发器。 有关依赖项属性值优先级的更多信息,请参见此msdn页面

一种可能的解决方案是重写整个Expander控件模板,如果IsEnabled为false,则向模板的触发器添加一个触发器,以隐藏“扩展”区域(默认模板仅在IsExpanded为false时才这样做)。 您可以使用Blend来获取默认模板,方法是在窗口上添加扩展器,右键单击它,然后在上下文菜单中选择“编辑模板”>“编辑副本”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM