IsEnabled = false 使 WPF 按钮在使用 Caliburn Micro 时消失

IsEnabled = false makes WPF button disappeared while using caliburn micro

我的 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 时它会折叠(就像现在一样)?

您不应在 XAML 标记中将 IsEnabled 设置为 false。只有 CanAdd 属性 returns falseButton 才会被禁用。因此,如果您想禁用 Button,您应该将视图模型从 CanAdd 实现为 return false。视图不应决定何时启用 Button.

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

禁用 Button 不会隐藏它。

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