无法弄清楚切换按钮是如何被禁用的

时间:2016-07-12 07:56:55

标签: c# wpf xaml mvvm

这里我有这个切换按钮,如下面的代码所示。此切换按钮也定义了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>

1 个答案:

答案 0 :(得分:1)

按钮状态可以自动更改,在这种情况下禁用,如果StartStopResetCommand执行CanExecute操作并且在某些时候返回false。

此外,如果您希望所有控件根据CanExecute刷新其状态,则应在命令中调用RaiseCanExecuteChanged