【问题标题】:IsEnabled for a container?是否为容器启用?
【发布时间】:2010-10-29 06:45:23
【问题描述】:

有什么方法可以禁用容器内的所有控件 - 例如网格? 谢谢!

UPD:虽然 Silverlight 的 Grid 有 IsEnabled 属性,但 Windows phone 7 Grid 肯定没有 IsEnabled 属性。

【问题讨论】:

标签: silverlight windows-phone-7


【解决方案1】:

对于 Silverlight,我在 Grid 周围添加了一个 ScrollViewer。由于 ScrollViewer 继承了 Control,我可以将其 IsEnabled 属性设置为 false,从而禁用网格内的所有控件。

【讨论】:

  • 之所以有效,是因为 ScrollViewer 继承自 Domen Kogler 的回答中提到的 ContentControl 类。
【解决方案2】:

用 ContentControl 包裹 Grid 或 StackPanel。 ContentControls 有一个 IsEnabled 属性。

【讨论】:

    【解决方案3】:

    在尝试禁用 Grid 中的所有子控件几天后,我发现以下内容:

    1. WP7 Grid 没有 IsEnabled 属性
    2. 我们仍然可以遍历所有子控件并设置它们的 IsEnabled 属性
    3. 我们还可以为 Grid 使用 Visibility 属性

    确实,如果控件被禁用,显示控件并没有多大意义,而且当我们根据用户的输入隐藏和显示控件时,它甚至可以节省一些空间并增加一些交互性。

    我同意这不是很有说服力的答案,但这是我迄今为止唯一的答案。 :)

    【讨论】:

    • Domen Kogler 的回答是一个更好的解决方案。
    【解决方案4】:

    我有另一个选择,使用 StoryBoard。当您的控件处于某种状态时,请设置容器的 IsEnabled 属性。这将禁用控件。下面示例中的状态是“ReorderEnabled”状态。我用它来禁用列表框上的按钮,以便用户可以对列表框中的项目进行排序。

                                <VisualState
                                    x:Name="ReorderEnabled">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.IsEnabled)" Storyboard.TargetName="ContentContainer">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <System:Boolean>False</System:Boolean>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <DoubleAnimation
                                                Storyboard.TargetName="ContentContainer"
                                                Storyboard.TargetProperty="Opacity"
                                                To="0.5"
                                                Duration="0"/>
                                    </Storyboard>
                                </VisualState>
    

    如果您不熟悉状态。编辑状态的最佳选择是使用 Expression Blend!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2020-08-03
      • 2013-06-10
      相关资源
      最近更新 更多