单击时如何禁用WPF按钮的边框?

Ano*_*ous 7 wpf styles

单击时如何禁用WPF按钮的边框?

我已经创建了如下所示的按钮,除非我点击按钮,否则一切正常.

<Button Background="Transparent" BorderBrush="Transparent">
    <Button.Content>
        <StackPanel>
            <Image Source="xxx.png" />
            <TextBlock Text="Change Password" />
        </StackPanel>
    </Button.Content>
</Button>
Run Code Online (Sandbox Code Playgroud)

当我点击按钮时,它有如下边框.

alt text http://www.freeimagehosting.net/uploads/8ece306bd4.png

我尝试为FocusVisualStyle按钮创建样式但它不能像我期望的那样工作,当我也设置时也会出现这个问题IsDefault="True".

D'H*_*Hag 11

我知道这是一个老问题,但我觉得我可以回答.

如果我正确理解了问题,单击按钮并继续前进后,其周围会出现边框.当您单击其他项目(如TextBox或其他按钮)时,边框将消失.

这个"边界"是"焦点"指标.

要防止这种情况,请在按钮上将"Focusable"设置为"False":

<Button Background="Transparent" BorderBrush="Transparent" Focusable="False">
    <Button.Content>
        <StackPanel>
            <Image Source="xxx.png" />
            <TextBlock Text="Change Password" />
        </StackPanel>
    </Button.Content>
</Button>
Run Code Online (Sandbox Code Playgroud)

  • 好吧,这个答案简直太疯狂了。谁都知道WPF中的简单解决方案需要300行代码和一个依赖项属性 (2认同)

Nir*_*Nir 9

您可能需要更改按钮模板,这将为您提供一个没有框架的按钮,但也没有任何按下或禁用效果:

在Window.Resources元素中:

<Style TargetType="Button" x:Key="TransparentButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Background="Transparent">
                   <ContentPresenter/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

按钮:

<Button Style="{StaticResource TransparentButton}">
    <Button.Content>
        <StackPanel>
            <Image Source="xxx.png" />
            <TextBlock Text="Change Password" />
        </StackPanel>
    </Button.Content>
</Button>
Run Code Online (Sandbox Code Playgroud)

现在,如果您需要更多的视觉反馈,请从此模板开始:

http://msdn.microsoft.com/en-us/library/ms753328.aspx

并删除东西,直到你得到你想要的东西.

不要忘记为元素添加透明背景,如果没有,或者背景为空,则按钮内的透明区域将无法点击.