首页 > 解决方案 > 切换按钮不再改变

问题描述

我一直在将我的用户控件移植到适当的 MVVM 架构中,而且我的按钮似乎没有按预期切换它们的 UI 状态。当您单击它时,我的切换按钮实际上在视觉上从打开切换到关闭,反之亦然,但现在它没有这样做,但是切换绑定到 IsChecked 的布尔值的命令可以工作......

这是资源字典中的样式:

<Style x:Key="ToggleButtonStyleForGroupSelector" TargetType="{x:Type ToggleButton}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
    <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
    <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <StackPanel Orientation="Horizontal">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    <Border x:Name="on" Width="30" Height="25" Background="#FF063959">
                        <TextBlock x:Name="onText" Text="ON" HorizontalAlignment="Center" VerticalAlignment="Center" 
                                   TextAlignment="Center" Foreground="White"/>
                    </Border>
                    <Border x:Name="off" Width="30" Height="25" Background="#FF063959">
                        <TextBlock x:Name="offText" Text="OFF" HorizontalAlignment="Center" VerticalAlignment="Center" 
                                   TextAlignment="Center" Foreground="White"/>
                    </Border>
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="#ADADAD"/>
                    </Trigger>
                    <Trigger Property="IsChecked" Value="true">
                        <Setter TargetName="on" Property="Background" Value="{StaticResource SecondaryThemeColour}"/>
                        <Setter TargetName="onText" Property="Foreground" Value="White"/>
                    </Trigger>
                    <Trigger Property="IsChecked" Value="False">
                        <Setter TargetName="off" Property="Background" Value="{StaticResource SecondaryThemeColour}"/>
                        <Setter TargetName="offText" Property="Foreground" Value="White"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

它的VM代码:

    private bool isAddGroupToggleChecked = false;
    public bool IsAddGroupToggleChecked
    {
        get { return isAddGroupToggleChecked; }
        set
        {
            isAddGroupToggleChecked = value;
            OnPropertyChanged(nameof(IsAddGroupToggleChecked));
        }
    }

    private void AddGroupToggle()
    {
        IsAddGroupToggleChecked = !IsAddGroupToggleChecked;
    }

    private ICommand addGroupToggleClickCommand;
    public ICommand AddGroupToggle_Click
    {
        get
        {
            if (addGroupToggleClickCommand == null)
            {
                addGroupToggleClickCommand = new RelayCommand(
                    param => AddGroupToggle()
                    //,
                    //param => (CurrentModel != null)
                );
            }
            return addGroupToggleClickCommand;
        }
    }

和视图 XAML

<StackPanel Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
    <ToggleButton x:Name="AddGroupToggle" Style="{StaticResource ToggleButtonStyleForGroupSelector}" Command="{Binding AddGroupToggle_Click}"
              IsThreeState="False" IsChecked="{Binding IsAddGroupToggleChecked}">
    </ToggleButton>
</StackPanel>

如果有人能发现我正在做的愚蠢的事情,我将不胜感激。也许它与数据上下文相关,我不知道......

标签: c#wpfxaml

解决方案


推荐阅读