2015-07-21 416 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:不要忘记有相当多的国家复选标记。悬停,按下,禁用等,以及大量的动画和转场。所以任何给你一个快速答案的人都不明白这个控制是如何放在一起的。