2016-02-26 138 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