我开始使用 Caliburn.Micro 在 WP 7.1 上编写应用程序。我的起始视图是一个带有登录和传递文本框的日志窗口以及带有登录操作的按钮。现在我想将顶部的进度条显示为不确定,并将文本框设置为只读。我一直在网上搜索,发现只有不满意的解决方案。我正在考虑这样的解决方案:
- 更改默认绑定器以按约定绑定属性,例如“ControlNameIsReadOnly”“ControlNameIsEnabled”
- 将屏幕设为仅显示进度条的对话框
有人解决了这个问题吗?这些解决方案都没有让我满意。
我开始使用 Caliburn.Micro 在 WP 7.1 上编写应用程序。我的起始视图是一个带有登录和传递文本框的日志窗口以及带有登录操作的按钮。现在我想将顶部的进度条显示为不确定,并将文本框设置为只读。我一直在网上搜索,发现只有不满意的解决方案。我正在考虑这样的解决方案:
有人解决了这个问题吗?这些解决方案都没有让我满意。
有几种方法-取决于您是否要基于约定和按控件进行操作
如果没有约定,您可以使用繁忙的属性,例如
class SomeViewModel : Screen // or whatever
{
public bool IsBusy
{
get { // getter code
}
set { // setter code, calling notifypropertychanged
}
}
然后在你的控制
<UserControl>
<Grid>
<TextBox>Hello World</TextBox>
<Border Background="#AAFFFFFF"> <!-- Semitransparent overlay -->
<ProgressBar IsIndeterminate="true" Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibilityConverter}" />
</Border>
</Grid>
</UserControl>
您的转换器可能如下所示:
class BooleanToVisibilityConverter : IValueConverter
{
public void Convert(object value, blah blah blah...)
{
if(value is bool)
{
if((bool)value) return Visibility.Visible;
return Visibility.Collapsed;
}
return null;
}
}
这样,您可以在控件上发生事情时覆盖进度条,以便用户无法交互。
您可能需要调整以使其最适合,因为我没有测试过任何一个:P
您甚至可以将IsReadOnly
文本框绑定到该IsBusy
属性。这当然是假设您不介意使用非常规方法并且它在 Windows Phone 7 上都可以工作 :)