0

我正在尝试使用: Modern UI for WPFExtended WPF Toolkit,更具体地说是IntegerUpDown,问题是, IntegerUpDown 不遵循所选的 ModernUI 主题。当我们将其更改为深色主题时会更清楚,IntegerUpDown 保持白色背景。

首先,我尝试类似...

<Style TargetType="{x:Type local:IntegerUpDown}" BasedOn="{StaticResource {x:Type TextBox}}" />

...但在运行时出现异常“只能基于目标类型为“IntegerUpDown”的样式。” 我明白了,到底 IntegerUpDown 是一个“复合”控件,而不是直接从 Textbox 派生的......

所以,我不知道我该怎么做。在我的研究中,我发现可能相关的文件:

但是我不是 XAML 专家,无法将这两个信息联系起来以获得解决方案,或者如果还有其他一些我看不到的简单解决方案......

谢谢你的帮助。

4

1 回答 1

2

正如您所注意到的,在处理自定义控件时,您通常需要做一些自定义样式来重新配置布局。这完全取决于你想走多远,但为了给你一个想法,我相信下面的工作流程应该修复背景色。

backgroundcolor 绑定到 Xceed 的资源主题,来自Wpf Toolkit的片段:

<Style x:Key="NumericUpDown" TargetType="{x:Type prim:InputBase}">
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
        <Setter Property="Background" Value="{DynamicResource {x:Static themes:ResourceKeys.ControlNormalBackgroundKey}}" />
        <Setter Property="BorderBrush" Value="{DynamicResource {x:Static themes:ResourceKeys.ControlNormalBorderKey}}" />
</Style>

这些属性的 ModernUI 样式(遵循所选主题)如下所示 ModernUI TextBox

<Style TargetType="{x:Type TextBoxBase}">
        <Setter Property="Foreground" Value="{DynamicResource InputText}"/>
        <Setter Property="Background" Value="{DynamicResource InputBackground}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource InputBorder}"/>
</Style>

DynamicResources 位于主题文件中,例如ModernUI.Dark.xaml

<SolidColorBrush x:Key="InputText" Color="#d1d1d1" />

<SolidColorBrush x:Key="InputBackground" Color="#333333" />
<SolidColorBrush x:Key="InputBackgroundHover" Color="#3e3e42" />
<SolidColorBrush x:Key="InputBorder" Color="#333333" />

您现在可以在样式中硬编码它们,使它们固定在 1 个主题上

<Style TargetType="{x:Type local:IntegerUpDown}">
      <Setter Property="Foreground" Value="#d1d1d1" />
      <Setter Property="Background" Value="#333333" />
      <Setter Property="BorderBrush" Value="#333333" />
</Style>

对于广泛的样式,您需要投入更多的工作,例如这篇文章解决 了重新设置 Watermark 属性的样式。

于 2016-06-26T11:14:30.173 回答