c# - 切换按钮不再改变
问题描述
我一直在将我的用户控件移植到适当的 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>
如果有人能发现我正在做的愚蠢的事情,我将不胜感激。也许它与数据上下文相关,我不知道......
解决方案
推荐阅读
- html - 尝试将数据从 .ts 导入 html
- python - 如何用字符串解决python while语句错误?
- python - 根据与字典值的匹配,用字典中的键替换子列表中的元素
- android - 通过依赖注入添加 Fragment
- logstash - 如何在 logstash.conf 文件中添加 2 个字段
- python - 用 2captcha python selenium 解决 Hcaptcha
- python - 带有 Python 和 Google Colab 的 MS Word 文档
- sql - 在选择查询中根据年龄提取不同的行
- visual-studio-2019 - 如何摆脱 Visual Studio“未映射到任何依赖关系验证图”警告?
- servicestack - 根据传入的请求控制servicestack中的cookiedomain