0

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

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

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

3 回答 3

2

在您的情况下,似乎最好使用 DataForm 控件。它将允许您将其中的每个字段作为一个组来控制。它确实提供了 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 查找数据表

干杯,

于 2012-04-16T13:42:24.410 回答
1

我建议你为你的 ContentControl 使用一个简单的扩展方法来生成 textBoxes 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;
    }
}

用法(对于 Name = "content" 的 ContentControl):

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>

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

于 2012-04-16T11:01:52.530 回答
0

如果我理解正确,您想将每个绑定TextBox.IsReadOnlyProperty到一个布尔值。

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

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

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

于 2012-04-16T13:53:23.060 回答