我一直在将用户控件移植到适当的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>
如果有人能发现我正在做的愚蠢的事情,我将不胜感激。也许与数据上下文有关,我不知道...