ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-边框内的按钮

2019-11-01 22:14:41  阅读:153  来源: 互联网

标签:button border wpf c


我在边框内的按钮有问题.我希望按钮填充边框内的按钮空间,但是该按钮位于边框上方而不是边框​​下方.这样,它就隐藏了边界所形成的弯曲半径.

这是我的问题的图片:

有人知道如何将按钮置于边框下方吗?

这是我的按钮的xaml:

<Button Name="filterCustomerBtn" 
        Command="{Binding Path=UpdateDepartments}" 
        Style="{StaticResource defaultButtonStyle}" 
        Width="200" 
        Margin="0, 15, 0, 0" 
        HorizontalAlignment="Center">Filter now</Button>

这是相关的xaml代码:

<Window.Resources>
    <Style x:Key="defaultButtonStyle" TargetType="Button">
        <Setter Property="Margin" Value="2"></Setter>
    </Style>
</Window.Resources>


<StackPanel Orientation="Vertical" DockPanel.Dock="Top">
    <Border Style="{StaticResource MainBorderStyle}" Margin="2" Background="LightBlue">
        <StackPanel Orientation="Vertical" VerticalAlignment="Center">
            <Button Name="filterCustomerBtn" Command="{Binding Path=UpdateDepartments}" Style="{StaticResource defaultButtonStyle}" Width="200" Margin="0, 15, 0, 0" HorizontalAlignment="Center" Panel.ZIndex="-1">Filter now</Button>
        </StackPanel>
    </Border>
</StackPanel>

结果图像

解决方法:

由于边框具有圆角半径,因此在按钮的默认样式下将边框圆角化以使其与边框无缝显示时,您无能为力.我已经用几个不同的控件(包括按钮)碰到了这个问题.您的问题的解决方案是为按钮创建一个ControlTemplate.在此模板中,您将能够将按钮底角的半径或所有4个角(如果需要)设置为边框的匹配角半径.单击here作为创建圆形按钮模板的一个好例子.下面,我尝试通过删除悬停动画来简化博客代码.专注于“边框”部分,因为它们是主要模板.

<Style x:Key="RoundedButton" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="{TemplateBinding Background}"/>
    <Setter Property="Foreground" Value="{TemplateBinding Foreground}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="0,0,1,1"/>
    <Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">                        
            <Border 
                CornerRadius="5,5,5,5" 
                BorderThickness="1,1,1,1" 
                RenderTransformOrigin="0.5,0.5" 
                x:Name="border" 
                BorderBrush="#000000">
                    <Border.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="1" ScaleY="1"/>
                            <SkewTransform AngleX="0" AngleY="0"/>
                            <RotateTransform Angle="0"/>
                            <TranslateTransform X="0" Y="0"/>
                        </TransformGroup>
                    </Border.RenderTransform>
                    <Border 
                        Background="{TemplateBinding Background}" 
                        CornerRadius="5,5,5,5" 
                        x:Name="border1">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="0.5*"/>
                                <RowDefinition Height="0.5*"/>
                            </Grid.RowDefinitions>
                            <Border Grid.Row="0" CornerRadius="5,5,0,0">
                                <Border.Background>
                                    <LinearGradientBrush 
                                        EndPoint="0.5,1" 
                                        StartPoint="0.5,0">
                                        <GradientStop 
                                            Color="#00FFFFFF" 
                                            Offset="0"/>
                                        <GradientStop 
                                            Color="#7EFFFFFF" 
                                            Offset="1"/>
                                    </LinearGradientBrush>
                                </Border.Background>
                            </Border>                                
                            <ContentPresenter 
                                VerticalAlignment="Center"  
                                Grid.RowSpan="2" 
                                HorizontalAlignment="Center" 
                                x:Name="contentPresenter"/>
                        </Grid>
                    </Border>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter 
                            Property="Opacity" 
                            TargetName="border1"  
                            Value="0.5"/>
                        <Setter 
                            Property="Opacity" 
                            TargetName="border" 
                            Value="1"/>
                        <Setter 
                            Property="Opacity" 
                            TargetName="contentPresenter" 
                            Value="0.5"/>
                    </Trigger>
                    <Trigger 
                        Property="IsPressed" 
                        Value="True">
                        <Setter 
                            Property="RenderTransform" 
                            TargetName="border">
                            <Setter.Value>
                                <TransformGroup>
                                    <ScaleTransform 
                                        ScaleX="0.9" 
                                        ScaleY="0.9"/>
                                    <SkewTransform 
                                        AngleX="0" 
                                        AngleY="0"/>
                                    <RotateTransform 
                                        Angle="0"/>
                                    <TranslateTransform 
                                        X="0" 
                                        Y="0"/>
                                </TransformGroup>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

另外,这里是指向该主题的MSDN页面的链接.

标签:button,border,wpf,c
来源: https://codeday.me/bug/20191101/1986953.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有