【问题标题】:WPF Style.TriggerWPF 样式.触发器
【发布时间】:2009-10-06 01:53:57
【问题描述】:

谁能告诉我为什么这个触发器不起作用:

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

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

【问题讨论】:

    标签: wpf resources triggers styles expander


    【解决方案1】:

    您需要将样式应用于 Expander,例如:

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

    如果您不想显式应用该样式,则不要声明 x:Key="Test",以及与该资源在同一范围内的所有扩展器(即,如果您在 @ 中声明了 x:Key="Test",则该特定页面中的所有扩展器987654324@) 将继承该样式。

    【讨论】:

    • 嗨,谢谢,但我忘记了你提到的代码块。我在 Style 标签中放了一个引用,问题仍然存在。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      问题是当用户点击展开器时,设置了IsExpanded“本地值”,它优先于触发器。有关依赖属性值优先级的更多信息,请参阅this msdn page

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

      【讨论】:

        猜你喜欢
        • 2010-10-15
        • 1970-01-01
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2011-09-20
        • 1970-01-01
        相关资源
        最近更新 更多