我的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
时,Button消失。我知道这是由于caliburn微拥vet所致。如何修改此约定,以便在将IsEnabled
设置为False
时禁用按钮,而当CanAdd
为false
时,它变为折叠状态(如现在)?
答案 0 :(得分:1)
您不应在XAML标记中将IsEnabled
设置为false
。当Button
属性仅返回CanAdd
时,false
将被禁用。因此,如果要禁用Button
,则应实现视图模型以从false
返回CanAdd
。视图不应决定何时启用Button
。
如果要隐藏Button
,请在XAML中将其Visibility
属性设置为Hidden
或Collapsed
或进行绑定将其添加到视图模型的Visibility
源属性或bool
属性中并使用BoolToVisibilityConverter
。
禁用Button
不会隐藏它。
答案 1 :(得分:-1)
我在xaml中为此按钮定义了IsEnabled
属性,仅用于测试目的。当ViewModel中的CanAdd
为false
时,按钮自动消失。为了解决这个问题,我必须将xaml中按钮的“可见性”属性设置为Visible
,如果您确实不想在特定情况下消失按钮,则不需要其他属性(可见性类型)。