IsEnabled用于容器?

时间:2010-10-29 06:45:23

标签: silverlight windows-phone-7

有没有办法禁用容器内的所有控件 - 例如网格? 谢谢!

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

使用ContentControl包装Grid或StackPanel。 ContentControls具有IsEnabled属性。

答案 2 :(得分:2)

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

  1. WP7 Grid没有IsEnabled属性
  2. 我们仍然可以遍历所有子控件并设置其IsEnabled属性
  3. 我们还可以使用Grid的Visibility属性
  4. 实际上,如果它们被禁用,它们显示控件并没有多大意义,它甚至可以节省一些空间并在我们隐藏并根据用户输入显示它时增加一些交互性。

    我同意这不是一个非常令人信服的答案,但它是我迄今为止唯一的答案。 :)

答案 3 :(得分:0)

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

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