当IsChecked在代码中发生变化时,在代码中更改ToggleButton样式

时间:2017-06-19 11:17:53

标签: c# wpf togglebutton

这是我的ToggleButton

<ToggleButton ToolTip="Walk!"  Name="NavigateWalkOrbitToggleButton" Width="35" Height="35"  Style="{DynamicResource MetroCircleToggleButtonStyle}" Checked="NavigateWalkOrbitToggleButton_Checked">
     <iconPacks:PackIconMaterial Kind="Walk" />
</ToggleButton>

并在代码背后:

private void NavigateWalkOrbitToggleButton(object sender, RoutedEventArgs e)
{
    RemoveCheckedToggleButtons();
    NavisDocumentControl.Document.Tool.Value = Autodesk.Navisworks.Api.Tool.NavigateFreeOrbit;
}

当我点击它时,样式正在正确更改,但当我从后面的代码中将IsChecked更改为falsetrue时,样式不会更改。

我正在使用xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls

1 个答案:

答案 0 :(得分:0)

你采取非常糟糕的实践方法,

DataTrigger是一种更好的方法

这看起来像这样

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}"  BasedOn="{DynamicResource MetroCircleToggleButtonStyle}">
            <Setter Property="Foreground" Value="Blue"></Setter>
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
    test
</ToggleButton>

鉴于你所展示的代码明智,很难确切地说为什么你的代码不能正常工作,因为你的代码甚至不会编译这是因为

Checked="NavigateWalkOrbitToggleButton_Checked"

你背后的代码说

private void NavigateWalkOrbitToggleButton(object sender, RoutedEventArgs e)

所以事件处理程序不存在

此外,您不会显示您正在运行的问题代码,该代码会更改IsChecked属性

一个选项可能是你只处理Checked只会在单击Ischecked变为true而不是未选中时才会出现

因此,检查处理程序执行的第一件事是RemoveCheckedToggleButtons(),一旦设置

,检查就会被取消设置