繁体   English   中英

从禁用按钮删除边框样式

[英]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属性的上述两种解决方案,并且在这方面都可以正常工作,但是当我尝试更改边框时却没有

不幸的是,在禁用时应用于ButtonStyle是在默认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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM