0

たくさんのテキストボックスを含むアプリケーションがあります。また、このテキストボックスは実際には無効になることはなく、代わりに読み取り専用になります。すべてのコントロールにContentControlの1つのプロパティを使用することを好みますが、IsEnabledをfalseに設定すると、すべてのテキストボックスが無効になります。どうすれば読み取り専用モードにすることができますか?私は自分でコントロールするのは好きではありませんが、スタイルなどを使用して動作を再割り当てできますか?

編集:私は実際に、バインディングを使用して、1か所でのバインディングを通じてすべてのコントロール(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

textBoxを作成する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;
    }
}

使用法(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を1つのブール値にバインドする必要があります。

:のIsEnabledプロパティをバインドする方法と同様の方法で、このようなことを試すことができます。ContentControl

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

これにより、必要なものが提供されます。変更するboolFlagと、すべてのテキストボックスがオンまたはオフになります。

于 2012-04-16T13:53:23.060 に答える