如何更改按钮颜色 IntegerUpDown(扩展 WPF 工具包)?
Posted
技术标签:
【中文标题】如何更改按钮颜色 IntegerUpDown(扩展 WPF 工具包)?【英文标题】:How to Change Button Color IntegerUpDown (Extended WPF Toolkit)? 【发布时间】:2017-05-15 06:06:48 【问题描述】:https://wpftoolkit.codeplex.com/wikipage?title=IntegerUpDown&referringTitle=NumericUpDown
我正在尝试将箭头按钮背景颜色更改为蓝色。
我认为这与 SpinnerButtonStyleKey 有关:
https://xceed.com/wp-content/documentation/xceed-toolkit-plus-for-wpf/Xceed.Wpf.Toolkit~Xceed.Wpf.Toolkit.Themes.ResourceKeys~SpinnerButtonStyleKey.html#
我能够在 Setter 中使用 png 图像更改 TextBox 背景和前景。
我找到了如何使用以下方法更改箭头颜色:
<SolidColorBrush x:Key="x:Static theme:ResourceKeys.GlyphNormalForegroundKey" Color="White"/>
这是 XAML 模板:
<Style x:Key="IntegerUpDownBlue" TargetType="x:Type wpfTool:IntegerUpDown">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="Resources/Images/TextBoxEnabled.png" Stretch="None" AlignmentX="Left" AlignmentY="Bottom"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="#FFFFFFFF"/>
<Setter Property="BorderBrush" Value="DynamicResource ComponentResourceKey ResourceId=ControlNormalBorderKey, TypeInTargetAssembly=x:Type Themes1:ResourceKeys"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Right"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="TextAlignment" Value="Right"/>
<Setter Property="WatermarkTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl Content="Binding" Foreground="DynamicResource x:Static SystemColors.GrayTextBrushKey" Focusable="False" Margin="0,0,3,0"/>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type wpfTool:IntegerUpDown">
<wpfTool:ButtonSpinner x:Name="PART_Spinner" AllowSpin="Binding AllowSpin, RelativeSource=RelativeSource TemplatedParent" BorderBrush="TemplateBinding BorderBrush" BorderThickness="TemplateBinding BorderThickness" ButtonSpinnerLocation="Binding ButtonSpinnerLocation, RelativeSource=RelativeSource TemplatedParent" Background="TemplateBinding Background" HorizontalContentAlignment="Stretch" IsTabStop="False" ShowButtonSpinner="Binding ShowButtonSpinner, RelativeSource=RelativeSource TemplatedParent" VerticalContentAlignment="Stretch">
<wpfTool:WatermarkTextBox x:Name="PART_TextBox" AutoMoveFocus="Binding AutoMoveFocus, RelativeSource=RelativeSource TemplatedParent" AutoSelectBehavior="Binding AutoSelectBehavior, RelativeSource=RelativeSource TemplatedParent" AcceptsReturn="False" BorderThickness="0" Background="Transparent" ContextMenu="TemplateBinding ContextMenu" Foreground="TemplateBinding Foreground" FontWeight="TemplateBinding FontWeight" FontStyle="TemplateBinding FontStyle" FontStretch="TemplateBinding FontStretch" FontSize="TemplateBinding FontSize" FontFamily="TemplateBinding FontFamily" HorizontalContentAlignment="TemplateBinding HorizontalContentAlignment" IsTabStop="TemplateBinding IsTabStop" IsUndoEnabled="True" MinWidth="20" Padding="TemplateBinding Padding" SelectAllOnGotFocus="Binding SelectAllOnGotFocus, RelativeSource=RelativeSource TemplatedParent" TextAlignment="Binding TextAlignment, RelativeSource=RelativeSource TemplatedParent" TextWrapping="NoWrap" TabIndex="TemplateBinding TabIndex" VerticalContentAlignment="TemplateBinding VerticalContentAlignment" WatermarkTemplate="Binding WatermarkTemplate, RelativeSource=RelativeSource TemplatedParent" Watermark="Binding Watermark, RelativeSource=RelativeSource TemplatedParent"/>
</wpfTool:ButtonSpinner>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="DynamicResource ComponentResourceKey ResourceId=ControlMouseOverBorderKey, TypeInTargetAssembly=x:Type Themes1:ResourceKeys"/>
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="Binding IsReadOnly, RelativeSource=RelativeSource Self" Value="False"/>
<Condition Binding="Binding AllowTextInput, RelativeSource=RelativeSource Self" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsReadOnly" TargetName="PART_TextBox" Value="True"/>
</MultiDataTrigger>
<DataTrigger Binding="Binding IsReadOnly, RelativeSource=RelativeSource Self" Value="True">
<Setter Property="IsReadOnly" TargetName="PART_TextBox" Value="True"/>
</DataTrigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="BorderBrush" Value="DynamicResource ComponentResourceKey ResourceId=ControlSelectedBorderKey, TypeInTargetAssembly=x:Type Themes1:ResourceKeys"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="Resources/Images/TextBoxDisabled.png" Stretch="None" AlignmentX="Left" AlignmentY="Bottom"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="#FFADD5FF"/>
<!-- <Setter Property="Foreground" Value="DynamicResource x:Static SystemColors.GrayTextBrushKey"/> -->
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="FocusManager.FocusedElement" TargetName="PART_TextBox" Value="Binding ElementName=PART_TextBox"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
我尝试更改这部分,添加一个 SolidColorBrush x:Key,但我没有发现任何变化。
<wpfTool:ButtonSpinner x:Name="PART_Spinner"...
Background="StaticResource IntegerUpDown.volume.Spinner.Static.Background"
我尝试改变 BorderBrush:
<Setter Property="BorderBrush" Value="Blue"/>
我也试过这个解决方案,但代码搞砸了,说“错误关闭 XML 标记“RepeatButton”不匹配:
wpf toolkit datetimepicker how to change color of spinner
【问题讨论】:
【参考方案1】:我创建了一个类似的 ButtonSpinner 来查看模板代码,而不是 IntegerUpDown。由于箭头颜色使用了 GlyphNormalForegroundKey,我查找了背景使用的是什么,它是 SpinnerButtonStyleKey >重复按钮。它适用于 IntegerUpDown。
我把这段代码放在一起,放在任何地方覆盖按钮。
<Style x:Key="x:Static theme:ResourceKeys.SpinnerButtonStyleKey" TargetType="RepeatButton">
<Setter Property="Background" Value="Blue" />
<Setter Property="BorderBrush" Value="Blue" />
</Style>
【讨论】:
以上是关于如何更改按钮颜色 IntegerUpDown(扩展 WPF 工具包)?的主要内容,如果未能解决你的问题,请参考以下文章