【问题标题】:IsEnabled = false makes WPF button disappeared while using caliburn microIsEnabled = false 使 WPF 按钮在使用 caliburn micro 时消失
【发布时间】:2018-08-14 00:38:35
【问题描述】:

我的 WPF 项目中有一个按钮,如下所示:

        <Button 
            Grid.Column="1" 
            HorizontalAlignment="Left"
            x:Name="Add"
            IsEnabled="False"
            BorderThickness="0"
            Grid.Row="1" VerticalAlignment="Top" 
            Height="23" Width="29" Margin="10,0,0,0">
            <StackPanel>
                <Image Source="\Resources\Pictures\Add.png"
                   Width="20" Height="20"/>
            </StackPanel>
        </Button>

在对应的 ViewModel 中我有Add 方法和CanAdd 属性:

public bool CanAdd
{
   get { return true; }
}

public void Add()
{
   //some code
}

问题是当IsEnabled 属性设置为False 时,按钮消失。我知道这是因为 caliburn 微对流。如何修改此约定,以便当我将IsEnabled 设置为False 按钮禁用时,当CanAddfalse 时,它会折叠(就像现在一样)?

【问题讨论】:

  • 你确定 Caliburn.micro 有约定 IsEnabled=false 使按钮消失吗?
  • 您可以使用 Visibility Property IsEnabled="False" Visibility="{Binding CanAdd,Converter={StaticResource BooleanToVisibilityConverter }}" cal:Message.Attach="[Event Click] 来填写您的需求=[Action Add]" 更简洁的方法是绑定 IsEnabled 属性,而不是对其进行硬编码。
  • @A.M:将 IsEnabled 设置为 false 不应导致 Button 消失。是什么让您认为它确实有效?

标签: wpf caliburn.micro


【解决方案1】:

您不应在 XAML 标记中将 IsEnabled 设置为 false。当CanAdd 属性仅返回false 时,Button 将被禁用。所以如果你想禁用Button,你应该实现你的视图模型来从CanAdd返回false。视图不应决定何时启用Button

如果您想隐藏 Button,您应该在 XAML 中将其 Visibility 属性设置为 HiddenCollapsed,或者将其绑定到 Visibility 源视图模型的属性或bool 属性并使用BoolToVisibilityConverter

禁用Button 不会隐藏它。

【讨论】:

  • 如果我没有在 xaml 中明确定义可见性属性(或者如果需要,可以在 ViewModel 中完成),当 CanAdd 设置为 false 时,按钮消失。
【解决方案2】:

我在 xaml 中为此按钮定义了 IsEnabled 属性,仅用于测试目的。当 ViewModel 中的 CanAddfalse 时,按钮会自动消失。为了解决这个问题,我必须将 xaml 中按钮的 Visibility 属性设置为 Visible,如果您真的不希望在特定情况下消失按钮,则不需要其他属性(可见性类型)。

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2019-02-06
    相关资源
    最近更新 更多