Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何覆盖样式_C#_Wpf - Fatal编程技术网

C# 如何覆盖样式

C# 如何覆盖样式,c#,wpf,C#,Wpf,我在我的WPF ModernUI应用程序中使用扩展WPF工具包中的DecimalUpDown控件: 让我不舒服的是:如果选择了强调色,例如红色,则文本框等标准ModernUI控件会很好地调整该颜色: 不过,小数上下控件仍保持其风格。例如,控件处于活动状态时为蓝色,控件中使用的RepeatButtons看起来不像ModernUI按钮: 更糟糕的是:视图中放置小数点向上向下控件的所有文本框现在都显示此样式,并以蓝色而不是红色突出显示: 我该如何改变这一点? 编辑:这是我按照Ben的建议生

我在我的WPF ModernUI应用程序中使用扩展WPF工具包中的DecimalUpDown控件:


让我不舒服的是:如果选择了强调色,例如红色,则文本框等标准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" />