我有一个包含Button
的UserControl,此按钮包含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
属性的两个上述解决方案,并且在这方面都可以正常工作,但在我尝试更改边框时却没有效果
答案 0 :(得分:2)
不幸的是,Style
在Button
被禁用时应用于默认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>
对缩进感到抱歉,但我相信你会实现你想要的!