我有以下xaml用于切换按钮:
<ToggleButton Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2" Command="{Binding DataContext.SelectAllCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content" Value="Select All"/>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="Select None"/>
<Setter Property="Command" Value="{Binding DataContext.SelectNoneCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
但是,单击按钮时,
IsChecked
属性永远不会更新。如果我使用snoop并强制将IsChecked设置为True,则触发器将启动。
最佳答案
我尝试了您的ToggleButton,它的工作正常。我看到的唯一问题是您明确设置了Command。应该使用Setter
代替它(就像使用Content
一样),以免破坏Trigger
。
<ToggleButton Name="toggleButton" Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content" Value="Select All"/>
<Setter Property="Command"
Value="{Binding DataContext.SelectAllCommand,
Mode=OneWay,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="Select None"/>
<Setter Property="Command" Value="{Binding DataContext.SelectNoneCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
如果仍然无法单击它,我将检查是否在可视树的上方将
IsHitTestVisible
或类似内容设置为False
。如果您想将您的版本与我的测试应用程序进行比较以查看什么不起作用,我将其上传到此处:http://www.mediafire.com/?ik24ftsfw2wwfwb
关于wpf - 为什么IsChecked不会更改此切换按钮?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4617937/