당신은 ContentControl
를 사용하지 않고 그냥 내가 물론 스타일을 편집하여 텍스트 색상을 변경할 수 있습니다 VisualStateManager
를 사용하여이 찾고 무엇을 할 수 있지만,이 유용하지 않다 나는 편집 할 때 흥미로운 주들 안에있다. 그래서 상태, 예를 들어 말을
는
Button
템플릿을 편집 할 때
- 은 첫째로 혼합이
Button.MouseOver.Foreground
에 대한 Brush
자원을 만들지 않습니다, Button
이 MouseOver
귀하의 텍스트에 새 Foreground
색상을 적용합니다.
그럼 하나 만들어 보겠습니다.
<SolidColorBrush x:Key="Button.MouseOver.Foreground" Color="Tomato" />
- 지금 우리는
contentPresenter
의 TextElement.Foreground
에 Storyboard
을 적용 할 수 있습니다 (다만 다른 브러시 자원과 함께 다음 줄을 추가합니다).
그래서 당신의 VSM은 다음과 같이 표시됩니다
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter"
Storyboard.TargetProperty="(TextElement.Foreground)">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="{Binding Source={StaticResource Button.MouseOver.Foreground}, Path=Color}" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed"/>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
하고 그게 다에요.
괜찮을 것 우리가 여기서 무슨 일을하는지주의 마십시오
만
Button
의
Content
그냥 텍스트가있다,하지만 귀하의 질문에 언급 한 바와 같이 사용량이 무엇인지 이후, 당신이 잘되어야합니다.
(!) 참고 :
당신은 단지 ControlTemplate
에 TextBlock
에 ContentPresenter
을 전환하여 똑같은 일을 할 수 있습니다.
당신이 Foreground
다음 예치 그냥 ContentControl
에 ContentPresenter
전환의 Button
의 Content
사용할 수 있으며 필요한 경우 할 수 있습니다 여전히 VSM 스토리 보드의 매우 유사한 방식이다.
업데이트 :
이 ControlTemplate
에서는, ContentControl
에 ContentPresenter
를 전환하려면 그냥 새 것으로 실제 요소를 전환 할 수 있습니다.
<ControlTemplate TargetType="{x:Type Button}">
...
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/>
...
</ControlTemplate>
에 :
<ControlTemplate TargetType="{x:Type Button}">
...
<ContentControl x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}"/>
...
</ControlTemplate>
그에 따라 RecognizesAccessKeys
를 지원하지 않습니다 예를 들어 ContentControl
위해 같은 자신의 속성을 업데이트해야하고 또한 실제로 콘텐츠를 표시하는 데에 Content="{TemplateBinding Content}"
설정이 필요합니다. ContentPresenter
을 사용하면 Content
속성이 암시 적으로 설정됩니다.
출처
2013-07-09 10:47:32
Viv
나는 당신이 왜 스타일로 할 수 없는지 이해하지 못합니다. –
안녕하세요 Viktor, 많은 답변을 주셔서 감사합니다. 그러나 가능한 경우 텍스트 속성을 사용하여 많은 작업을 수행함에 따라 좀 더 유연한 (예 : 설정하고 잊어 버리십시오) 매번 트리거를 설정하려고합니다. Viv의 답변은 제가 따라 왔던 대답이었습니다. 그러나 업데이트 부분은 마치 텍스트가 단순히 텍스트 상자 인 것처럼 텍스트로 작업 할 수있게 해주었습니다. 많은 도움을 주셔서 감사합니다. –