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
按钮时禁用,并且当 CanAdd
为 false
时它会折叠(就像现在一样)?
您不应在 XAML 标记中将 IsEnabled
设置为 false
。只有 CanAdd
属性 returns false
时 Button
才会被禁用。因此,如果您想禁用 Button
,您应该将视图模型从 CanAdd
实现为 return false
。视图不应决定何时启用 Button
.
如果你想隐藏 Button
你应该将其 Visibility
属性 设置为 Hidden
或 Collapsed
在 XAML 中,或将其绑定到视图模型的 Visibility
源 属性 或 bool
属性 并使用 BoolToVisibilityConverter
.
禁用 Button
不会隐藏它。
我在 xaml 中为此按钮定义了 IsEnabled
属性 仅用于测试目的。当 ViewModel 中的 CanAdd
为 false
时,按钮自动消失。为了解决这个问题,我必须将 xaml 中按钮的 Visibility 属性 设置为 Visible
并且如果您真的不想消失按钮,则不需要其他属性(可见性类型)在特定情况下。
我的 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
按钮时禁用,并且当 CanAdd
为 false
时它会折叠(就像现在一样)?
您不应在 XAML 标记中将 IsEnabled
设置为 false
。只有 CanAdd
属性 returns false
时 Button
才会被禁用。因此,如果您想禁用 Button
,您应该将视图模型从 CanAdd
实现为 return false
。视图不应决定何时启用 Button
.
如果你想隐藏 Button
你应该将其 Visibility
属性 设置为 Hidden
或 Collapsed
在 XAML 中,或将其绑定到视图模型的 Visibility
源 属性 或 bool
属性 并使用 BoolToVisibilityConverter
.
禁用 Button
不会隐藏它。
我在 xaml 中为此按钮定义了 IsEnabled
属性 仅用于测试目的。当 ViewModel 中的 CanAdd
为 false
时,按钮自动消失。为了解决这个问题,我必须将 xaml 中按钮的 Visibility 属性 设置为 Visible
并且如果您真的不想消失按钮,则不需要其他属性(可见性类型)在特定情况下。