切换按钮不再更改

时间:2019-09-16 20:15:44

标签: c# wpf xaml

我一直在将用户控件移植到适当的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>

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

0 个答案:

没有答案
相关问题