控制 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>
似乎使用数据表单控件最适合您的情况。它将允许您作为一个组控制其中的每个字段。它确实提供了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
绑定到单个布尔值。
您可以尝试这样的事情,其方式类似于绑定ContentControl
的IsEnabled
属性:
<TextBox IsReadOnly="{Binding boolFlag, Mode=OneWay}" ... /> <!-- in each of your textboxes -->
这应该为您提供所需的内容:更改boolFlag
,每个文本框打开或关闭。