C# WPF XAML:带IsDefault=";“真的”;
当我尝试在具有IsDefault=“True”属性的按钮上输入边框笔刷颜色时,边框将不会更改,并保留IsDefault属性的蓝色边框 如果删除IsDefault=“True”,则边框笔刷颜色适用C# WPF XAML:带IsDefault=";“真的”;,c#,wpf,xaml,C#,Wpf,Xaml,当我尝试在具有IsDefault=“True”属性的按钮上输入边框笔刷颜色时,边框将不会更改,并保留IsDefault属性的蓝色边框 如果删除IsDefault=“True”,则边框笔刷颜色适用 有没有一种方法可以将按钮设为默认值并为其提供自定义边框颜色?方法1:最好的方法是在窗口中定义一种样式。参考资料将该样式应用于所有按钮: <Window.Resources> <Style TargetType="{x:Type Button}"> <
有没有一种方法可以将按钮设为默认值并为其提供自定义边框颜色?方法1:最好的方法是在
窗口中定义一种样式。参考资料将该样式应用于所有按钮:
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="Blue" />
</Style>
</Window.Resources>
问题在于按钮控制模板
,它在某些情况下会改变按钮的外观
查看默认按钮的样式/控件模板:
<Style x:Key="ButtonFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#F3F3F3" Offset="0"/>
<GradientStop Color="#EBEBEB" Offset="0.5"/>
<GradientStop Color="#DDDDDD" Offset="0.5"/>
<GradientStop Color="#CDCDCD" Offset="1"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Themes:ButtonChrome>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
<Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
相关部分可能是
<Themes:ButtonChrome x:Name="Chrome"
...
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderPressed="{TemplateBinding IsPressed}"
RenderDefaulted="{TemplateBinding IsDefaulted}"
... >
和控件模板触发器
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
<Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
</Trigger>
因此,对于您的特定情况,如果您确实只希望为IsDefault
设置不同的边框,但希望更改焦点、鼠标悬停和其他状态的所有边框,那么您可以通过在主题:ButtonChrome
中设置RenderDefaulted=“False”
(而不是RenderDefaulted=)来修改控件模板{TemplateBinding isdefault}“
).如果要将样式应用于所有按钮,则需要删除方法1中的x:Key
。始终需要TargetType!No luck:/仍保留默认蓝色colour@NiallMitch14是的,这就是它要做的。你有按钮的默认颜色-然后你想要不同的应用样式和更改Va我知道在你的例子中它仍然是蓝色的。但是我把颜色改成了绿色,它仍然是蓝色。你的按钮不能是按钮类型,把x:type:button改成x:type ButtonChrome或者你正在使用的任何类型
<Themes:ButtonChrome x:Name="Chrome"
...
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderPressed="{TemplateBinding IsPressed}"
RenderDefaulted="{TemplateBinding IsDefaulted}"
... >
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
<Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
</Trigger>