这里我有这个切换按钮,如下面的代码所示。此切换按钮也定义了control template
。在某些情况下,此按钮被禁用。即我在按钮上cannot click
了。我遵循MVVM
模式。我已经把断点和检查。与更改按钮IsEnabled
状态无关。
从过去1小时开始,我试图弄清楚按钮的启用状态是如何变化的。没有任何与按钮启用状态更改或与代码背后的相关内容相关的内容。 因此,我不会在此处发布不需要的代码/视图模型代码。
如果你可以帮我从XAML代码中弄清楚按钮状态如何变为禁用状态,或者哪个属性导致了这种变化,那将非常有用。提前谢谢。
<ToggleButton x:Name="TestBtn"
Height="60"
Margin="5"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
Command="{Binding StartStopResetCommand}"
Content="{Binding BtnState,
Converter={StaticResource BtnTextConverter}}"
FontSize="16"
Foreground="White"
PreviewKeyDown="BtnPreviewKeyDown">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness=".5"
SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Focusable="False"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="contentPresenter" Property="TextElement.Foreground" Value="#595959" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding BtnState}" Value="{x:Static my:ButtonState.Start}">
<Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding BtnState}" Value="{x:Static my:ButtonState.Stop}">
<Setter Property="Background" Value="{StaticResource ExecutingStateColor}" />
</DataTrigger>
<DataTrigger Binding="{Binding BtnState}" Value="{x:Static my:ButtonState.Reset}">
<Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
答案 0 :(得分:1)
按钮状态可以自动更改,在这种情况下禁用,如果StartStopResetCommand
执行CanExecute
操作并且在某些时候返回false。
此外,如果您希望所有控件根据CanExecute
刷新其状态,则应在命令中调用RaiseCanExecuteChanged
。