C# 如何覆盖样式
我在我的WPF ModernUI应用程序中使用扩展WPF工具包中的DecimalUpDown控件:C# 如何覆盖样式,c#,wpf,C#,Wpf,我在我的WPF ModernUI应用程序中使用扩展WPF工具包中的DecimalUpDown控件: 让我不舒服的是:如果选择了强调色,例如红色,则文本框等标准ModernUI控件会很好地调整该颜色: 不过,小数上下控件仍保持其风格。例如,控件处于活动状态时为蓝色,控件中使用的RepeatButtons看起来不像ModernUI按钮: 更糟糕的是:视图中放置小数点向上向下控件的所有文本框现在都显示此样式,并以蓝色而不是红色突出显示: 我该如何改变这一点? 编辑:这是我按照Ben的建议生
让我不舒服的是:如果选择了强调色,例如红色,则文本框等标准ModernUI控件会很好地调整该颜色:
不过,小数上下控件仍保持其风格。例如,控件处于活动状态时为蓝色,控件中使用的RepeatButtons看起来不像ModernUI按钮:
更糟糕的是:视图中放置小数点向上向下控件的所有文本框现在都显示此样式,并以蓝色而不是红色突出显示:
我该如何改变这一点?
编辑:这是我按照Ben的建议生成的ControlTemplate:
<ControlTemplate x:Key="ControlControlTemplate1" TargetType="{x:Type Control}">
<xctk:ButtonSpinner x:Name="PART_Spinner" AllowSpin="{Binding AllowSpin, RelativeSource={RelativeSource TemplatedParent}}"
...>
<xctk:WatermarkTextBox x:Name="PART_TextBox" AutoMoveFocus="{Binding AutoMoveFocus, RelativeSource={RelativeSource TemplatedParent}}"
AutoSelectBehavior="{Binding AutoSelectBehavior, RelativeSource={RelativeSource TemplatedParent}}"
AcceptsReturn="False"
.../>
</xctk:ButtonSpinner>
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
...
然后可以设置水印文本框和按钮内部的样式:
到目前为止我还没有做到的是:是否有办法访问ButtonSpinner中的RepeatButtons,以便我可以设置它们的样式?可能需要编写自己的模板并在其中定义颜色。有时,没有直接的方法来更改作为UI元素一部分的属性。 尝试编辑模板的副本并搜索蓝色值。 右键单击小数点向上向下,然后转到“编辑模板” 如果没有设置颜色值,则有可能通过System.Colors(例如ActiveBorderBrush)进行设置
当控件处于活动状态、高亮显示状态等时,系统颜色定义了一些标准行为。MSDN列出了所有现有行为:
这太棒了,我不知道“编辑模板”选项。在本例中,由于控件本身由多个控件组成[一个文本框,两个重复按钮],因此我无法访问“子”控件。不过,非常好!Ben,有没有办法从模板中访问子控件?我在问题中添加了模板。我可以成功设置“外部”元素(边框等)的样式,但例如控件中的RepeatButtons,我无法访问。也许您可以尝试将ButtonSpinner添加为单独的元素,然后重新执行“编辑副本”步骤。然后为所有ButtonSpenners或命名的ButtonSpenners创建自定义样式,以便在DecimalUpDown控件中使用。例如,当添加到中时,将更改progressbar的所有样式
<ControlTemplate x:Key="ControlControlTemplate1" TargetType="{x:Type Control}">
<xctk:ButtonSpinner x:Name="PART_Spinner" AllowSpin="{Binding AllowSpin, RelativeSource={RelativeSource TemplatedParent}}"
...>
<xctk:WatermarkTextBox x:Name="PART_TextBox" AutoMoveFocus="{Binding AutoMoveFocus, RelativeSource={RelativeSource TemplatedParent}}"
AutoSelectBehavior="{Binding AutoSelectBehavior, RelativeSource={RelativeSource TemplatedParent}}"
AcceptsReturn="False"
.../>
</xctk:ButtonSpinner>
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
<SolidColorBrush x:Key="{x:Static SystemColors.ActiveBorderBrush}" Color="Orange" />