[英]Removing border style from disabled button
我有一个UserControl,其中包含一个Button
,然后此Button包含一个Image
和一个TextBlock
。 这使我有了图像按钮。 我还希望按钮具有无边界样式,这是通过将按钮BorderBrush
设置为null来实现的。 这部分一切正常。
我遇到的问题是何时要“禁用” UserControl。 我可以通过将IsEnabled
属性设置为false
来做到这一点,该属性级联到按钮,并适当地防止单击按钮。 但是,当按钮被禁用时,它会显示一个边框,这是我不想要的。
问题 :禁用按钮后如何摆脱它的边框?
我尝试了几种不同的方法,例如通过代码设置边框:
MyButton.BorderBrush = Brushes.Transparent;
并在XAML中使用样式:
<Button.Style>
<Style TargetType="Button">
<Setter Property="BorderBrush" Value="{x:Null}"/>
</Style>
</Button.Style>
和其他一些东西只是为了尝试使某些东西起作用,但是到目前为止,没有任何改变。
注意:我已经尝试使用Opacity
属性的上述两种解决方案,并且在这方面都可以正常工作,但是当我尝试更改边框时却没有
不幸的是,在禁用时应用于Button
的Style
是在默认ControlTemplate
。 这意味着,如果要更改它,则需要为Button
定义一个新的ControlTemplate
。 您可以在MSDN上的“ 按钮样式和模板”页面中找到默认的ControlTemplate
。
提供新的ControlTemplate
,有时会遗漏原始模板中的某些部分,因此一个好的出发点是实施默认ControlTemplate
就像在该页面上一样,然后根据自己的喜好对其进行“调整”。
由于您已经有一个用于Button
的模板,因此需要插入一个带有Property="IsEnabled" Value="False"
的Trigger
:
一个Button
示例ControlTemplate
:
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" TextBlock.Foreground="{StaticResource Button.Static.Foreground}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
<Setter Property="TextBlock.Foreground" TargetName="border" Value="{StaticResource Button.MouseOver.Foreground}" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
<Setter Property="TextBlock.Foreground" TargetName="border" Value="{StaticResource Button.Pressed.Foreground}" />
</Trigger>
//Here's the code where you want to change the border
//Change the Value part to whatever you want.
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
很抱歉缩进,但我相信您会实现您想要的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.