2015-07-21 414 views
1
<CheckBox Background="White" IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"/> 

我需要更改支票的顏色。因爲Background改變了背景顏色,所以我想到了Forground做到了這一點,但無濟於事。c#WPF更改複選框的複選顏色

任何想法? Surly有一種方法可以直接更改校驗顏色。我試着用谷歌搜索這個,但我發現的唯一解決方案是製作自己的複選框。

屬性在哪裏更改CheckBox Check顏色?

我找到了一個答案與

<Path Visibility="Collapsed" 
     Width="7" 
     Height="7" 
     x:Name="CheckMark" 
     SnapsToDevicePixels="False" 
     StrokeThickness="2" 
     Data="M 0 0 L 7 7 M 0 7 L 7 0"> 
    <Path.Stroke> 
    <SolidColorBrush Color="{DynamicResource GlyphColor}" /> 
    </Path.Stroke> 
</Path> 

但是,這並不工作,因爲我無法添加,作爲一個子元素。即使它有效,它也會變化太多。我想要的只是帶有黑色複選標記的白色背景。灰色灰色看起來很糟糕。沒有內置的方法來改變顏色?

+1

http://stackoverflow.com/questions/9727140/how-to-change-the-color-of-the-checkmark-in-wpf-checkbox-control –

+0

https://msdn.microsoft.com/zh-cn/ -us/library/cc189093(VS.95).aspx –

+0

我不明白。 controlTemplate不能是複選框的子項。 –

回答

0

這和SledgeHammer用Bullet bs說的那樣令人討厭。基本上,畫筆是硬編碼的,所以不是一個簡單的解決方案。這就是說,這是一個快速的1行破解。這不會破壞我的機器上的動畫。

雖然,正如SledgeHammer指出的那樣,有幾種不同的狀態。我會留給你來覆蓋你需要的。這將做基本檢查。

typeof(BulletChrome).GetRuntimeFields().Where(f => f.Name == "_commonCheckMarkFill").First().SetValue(null, new SolidColorBrush(Colors.Yellow)); 

你也將不得不參考PresentationFramework.Aero,包括using Microsoft.Windows.Themes;

Example on my machine

它值得指出的是,這將影響到每一個CheckBox,並有可能(取決於你刷覆蓋) RadioButton,所以根據你的需要,YMMV。但它確實符合你的要求。

+0

反射是我的一個簡單的解決方法,但是指出這個「修復」的讚譽應該是廣泛的,並且也會影響單選按鈕。如果你想在每個複選框的基礎上自定義,你必須複製BulletChrome類。 – SledgeHammer

+0

同意。 我讀過你的編輯2和3,但錯過了第一個! 當我看到它時,我已經完成了所有這些工作,並說「eff it」。 至少他現在有一個成功的例子。 :) – Taekahn

+0

'RuntimeReflectionExtensions.GetRuntimeField方法'是因爲.Net4.5 – nyconing

2

不幸的是,WPF的人決定讓複選框BEAST來處理。如果您研究模板,檢查本身實際上是一個「BulletChrome」控件。現在,問題是BulletChrome控件全部用C#編寫,而不是從外部定製,而不是通過XAML,因此所有的筆和筆都是硬編碼的。你會發現Reflector或IlSpy,你在GlyphStroke和GlyphFill屬性之後,並且這兩個屬性克隆了內部硬編碼的畫筆。

我不得不做同樣的事情,我最終只是使用ILSpy複製整個班級,並修改它只是爲了調整一些東西。

不是您希望的答案,但是沒有辦法輕鬆地重寫此控件。

編輯:好吧,你可以修改兩個刷子用反射,如果你想。然後複製整個課程就容易了:)。

它是一個類的野獸,所以... BulletChrome.cs = 2262行!編輯#2:順便說一句,做一個快速的1或2行黑客將破壞動畫,所以你需要去正確的路線,如果你關心那些:)。

編輯#3:不要忘記有相當多的國家複選標記。懸停,按下,禁用等,以及大量的動畫和轉場。所以任何給你一個快速答案的人都不明白這個控制是如何放在一起的。