从禁用按钮中删除边框样式

时间:2013-10-31 16:29:45

标签: c# wpf button border

我有一个包含Button的UserControl,此按钮包含ImageTextBlock。这使我有一个图像按钮。我还希望按钮具有无边框样式,我通过将按钮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属性的两个上述解决方案,并且在这方面都可以正常工作,但在我尝试更改边框时却没有效果

2 个答案:

答案 0 :(得分:2)

不幸的是,StyleButton被禁用时应用于默认ControlTemplate。这意味着如果您想要更改它,则需要为ControlTemplate定义新的Button。您可以在MSDN上的Button Styles and Templates页面中找到默认的ControlTemplate

提供新的ControlTemplate时,有时会错过原始模板中的部分内容,因此一个很好的起点是实现默认的ControlTemplate,因为它在该页面上然后“调整”为你的喜好。

答案 1 :(得分:1)

由于您已经有Button的模板,因此您需要在Trigger中插入Property="IsEnabled" Value="False"

ControlTemplate的示例Button

<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>

对缩进感到抱歉,但我相信你会实现你想要的!