2016-02-26 130 views
0

有没有简单的方法让ToggleButton显示为普通按钮?我试图点击按钮,它会触发IsEnabled为另一个控件为false。用ToggleButton,我可以在IsChecked属性上做一个触发器。但是切换按钮在切换时会显得非常不同。谢谢。WPF ToggleButton看起来像普通按钮

回答

2

在WPF设计器中,右键点击相关的ToggleButton并选择Edit Template -> Edit a Copy。选择适当的设置并单击确定。

ToggleButton的默认模板将被添加到您的XAML中。在那里,删除此代码:

<Trigger Property="IsChecked" Value="true"> 
    <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/> 
</Trigger> 

您可以重复多的ToggleButtons这种风格/模板。

编辑

您在您的处置另一种选择。使用标准Button并连接Click事件处理程序或Command绑定,该绑定会执行代码以更新IsChecked属性,例如,

<CheckBox IsChecked="{Binding IsChecked}" IsEnabled="False" Content="State" /> 
<Button Content="Toggle" Command="{Binding ToggleStateCommand}" /> 

然后,当然,你的命令只是必须执行

IsChecked = !IsChecked 

这一切都假定你有一个ICommand实现你舒服和你正在做的有点MVVM,但也许这就是有点超出了这个Q/A的范围。

+0

感谢。有没有一种简单的方法来做到这一点?不想从Button复制样式代码。 – Helic

+0

这很“容易”,而“重复” - 如果你可以这样称呼 - 是最小的。该模板只使用自定义的'ButtonChrome'对象,该对象具有适用当前Windows主题的适当样式。这是我会主张的唯一一种“重复”。也就是说,你对限制滥用的热情是一件好事。 – Guttsy

1

最简单的方法是使ToggleButton透明,并显示其他内容控件。为内容设置IsHitTestVisible = False

也尝试使用保证金值。

<ToggleButton Background="Transparent" BorderBrush="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <Button Content="Toggle Button" Margin="-5" IsHitTestVisible="True" /> 
</ToggleButton> 

以上可定制使用切换按钮的内容,如:

<ToggleButton Content="Toggle Button" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Canvas.Left="233" Canvas.Top="158"> 
    <ToggleButton.ContentTemplate> 
     <DataTemplate> 
      <Button IsHitTestVisible="False" Content="{Binding}"/> 
     </DataTemplate> 
    </ToggleButton.ContentTemplate> 
</ToggleButton> 
+0

此解决方案将鼠标悬停在按钮上时禁用了动画 – Helic

+0

@Helic您可以将动画向下移动到内部按钮。如果你发布你的动画代码,我可以修改我的答案。 – AnjumSKhan