控制 Silverlight 中的启用/禁用行为

本文关键字:启用 Silverlight 控制 | 更新日期: 2023-09-27 18:31:11

我有一个应用程序,里面有很多文本框。此外,此文本框实际上永远不会被禁用,而是变为只读。我更喜欢对所有控件使用 ContentControl 的一个属性,但是如果我将 IsEnabled 设置为 false,则所有文本框都将被禁用。如何使它们进入只读模式?不过,我不喜欢自己控制,也许我可以使用样式或其他东西来重新分配行为?

编辑:我实际上正在寻找解决方案,允许我使用绑定通过绑定在一个地方绑定来绑定所有控件(IsReadOnly)的状态。喜欢:

<ContentControl IsEnabled="{Binding boolFlag, Mode=OneWay}">
    <Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch">
        ....
        <TextBox/>
    </Grid>
</ContentControl>

控制 Silverlight 中的启用/禁用行为

似乎使用数据表单控件最适合您的情况。它将允许您作为一个组控制其中的每个字段。它确实提供了IsReadOnly选项,并且带有许多非常好的免费功能。

这个视频给出了一个很好的介绍

http://www.silverlight.net/learn/data-networking/data-controls/dataform-control

http://www.silverlightshow.net/items/Creating-Rich-Data-Forms-in-Silverlight-3-Introduction.aspx

http://www.silverlight.net/content/samples/sl4/toolkitcontrolsamples/run/default.html查找数据形式

干杯

我建议您为ContentControl使用一个简单的扩展方法,该方法将使文本框IsReadOnly = True。例如:

public static class ContentControlEx
{
    public static void DisableTextBoxes(this ContentControl contentControl)
    {
        FrameworkElement p = contentControl as FrameworkElement;
        var ts = p.GetChildren<TextBox>();
        ts.ForEach(a => { if (!a.IsReadOnly) a.IsReadOnly = true; });
    }
    public static List<T> GetChildren<T>(this UIElement parent) where T : UIElement
    {
        List<T> list = new List<T>();
        int count = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < count; i++) {
            UIElement child = VisualTreeHelper.GetChild(parent, i) as UIElement;
            if (child != null) {
                if (child is T)
                    list.Add(child as T);
                List<T> l1 = GetChildren<T>(child);
                foreach (T u in l1)
                    list.Add(u);
            }
        }
        return list;
    }
}

用法(对于名称 ="内容"的内容控件):

content.DisableTextBoxes();

我有一个这样的 XAML:

<Grid x:Name="LayoutRoot" Background="White">
    <ContentControl IsEnabled="True" Name="content">
        <StackPanel Margin="15">
            <TextBox Width="150" Name="tb1" Margin="5" Text="{Binding tb1}" />
            <TextBox Width="150" Name="tb2" Margin="5" Text="{Binding tb2}" />
            <TextBox Width="150" Name="tb3" Margin="5" Text="{Binding tb3}"/>
            <TextBox Width="150" Name="tb4" Margin="5" Text="{Binding tb4}"/>
            <Button Name="bSubmit" Click="bSubmit_Click">Make Textboxes readonly</Button>
        </StackPanel>
    </ContentControl>
</Grid>

让我知道它是否有帮助...

如果我

理解正确,您希望将每个TextBox.IsReadOnlyProperty绑定到单个布尔值。

您可以尝试这样的事情,其方式类似于绑定ContentControlIsEnabled属性:

<TextBox IsReadOnly="{Binding boolFlag, Mode=OneWay}" ... /> <!-- in each of your textboxes -->

这应该为您提供所需的内容:更改boolFlag,每个文本框打开或关闭。