Làm thế nào để bạn loại bỏ hoàn toàn đường viền nút trong wpf?


129

Tôi đang cố gắng tạo một nút có hình ảnh trong đó và không có viền - giống như các nút thanh công cụ Firefox trước khi bạn di chuột qua chúng và xem nút đầy đủ.

Tôi đã thử cài đặt BorderBrushthành Transparent, BorderThicknessđến 0và cũng đã thử BorderBrush="{x:Null}", nhưng bạn vẫn có thể thấy đường viền của nút.



1
Một nút không biên giới trong WPF? !!! Bạn nghĩ gì về điều này, một khung UI trực quan ??!
Josh Noe

Câu trả lời:


258

Thử cái này

<Button BorderThickness="0"  
    Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" >...

1
Tuyệt diệu! Mọi giải pháp khác mà tôi tìm thấy đều cực kỳ phức tạp và liên quan đến việc ghi đè tất cả kiểu dáng của nút.
Jonathan

10
Thật không may, nó vô hiệu hóa hiệu ứng của cài đặt HorizontalContentAlignmentthành Stretch.
Konrad Morawski

3
@ Cur các câu hỏi được chỉ định WPF không phải Silverlight
Simon

10
Đây là biến nút của tôi thành nút chuyển đổi. Khi tôi nhấp vào nút, nó vẫn được chọn cho đến khi tôi nhấp vào nút khác. Làm thế nào tôi có thể ngăn chặn nó hành động như vậy?
burnttoast11

2
Tôi sẽ nâng cấp điều này hai lần nếu tôi có thể. Tiết kiệm cho tôi rất nhiều mã để có được giao diện tôi muốn.
avenmore

52

Bạn có thể phải thay đổi mẫu nút, điều này sẽ cung cấp cho bạn một nút không có khung bao giờ, nhưng cũng không có bất kỳ hiệu ứng nhấn hoặc tắt nào:

    <Style x:Key="TransparentStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Background="Transparent">
                        <ContentPresenter/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Và nút:

<Button Style="{StaticResource TransparentStyle}"/>

Tôi không biết tại sao các giải pháp khác dường như hoạt động ở người khác. Giải pháp này là giải pháp duy nhất có thể hoạt động được vì đường viền ContentPresenter cũng bị xóa! Làm tốt lắm!
Nasenbaer

1
Tôi đã thử một vài giải pháp khác, đây là công trình duy nhất. btw, đối với người mới, mã <style> </ style> phải nằm trong tiêu đề của xaml của bạn như trong <Window> <Window.Resource> <Style> ....
Felix

1
Ngoài ra, có một lỗi đánh máy trong câu trả lời: <Button Style="{StaticResource TransparentButton}"/>nên là<Button Style="{StaticResource TransparentStyle}"/>
Felix

Làm việc cho tôi là tốt, giải pháp tuyệt vời!
bbqchickenrobot

Làm việc cho tôi, giải pháp tuyệt vời!
Contango

23

Những gì bạn phải làm là một cái gì đó như thế này:

<Button Name="MyFlatImageButton"
        Background="Transparent"
        BorderBrush="Transparent"
        BorderThickness="0" 
        Padding="-4">
   <Image Source="MyImage.png"/>
</Button>

Hy vọng đây là những gì bạn đang tìm kiếm.

Chỉnh sửa: Xin lỗi, quên đề cập rằng nếu bạn muốn xem viền nút khi bạn di chuột qua hình ảnh, tất cả những gì bạn phải làm là bỏ qua Padding = "- 4" .


1
Điều này hoạt động, và đây là ý tưởng rất hay trong một số trường hợp
tò mò

Điều này hoạt động hoàn hảo khi bạn muốn kéo dài một hình ảnh bên trong một nút. Loại bỏ phần đệm cho phép hình ảnh chiếm kích thước nút đầy đủ.
visc

23

Tôi không biết tại sao những người khác không chỉ ra rằng câu hỏi này được nhân đôi với câu hỏi này với câu trả lời được chấp nhận .

Tôi xin trích dẫn ở đây là giải pháp: Bạn cần phải ghi đè lên ControlTemplatecủa Button:

<Button Content="save" Name="btnSaveEditedText" 
                Background="Transparent" 
                Foreground="White" 
                FontFamily="Tw Cen MT Condensed" 
                FontSize="30" 
                Margin="-280,0,0,10"
                Width="60"
                BorderBrush="Transparent"
                BorderThickness="0">
    <Button.Template>
        <ControlTemplate TargetType="Button">
             <ContentPresenter Content="{TemplateBinding Content}"/>
        </ControlTemplate>
    </Button.Template>  
</Button>

5
Nếu bạn không đặt bất kỳ nội dung nào vào nút, nó sẽ không phản hồi lại các lần nhấp. Bạn có thể khắc phục điều đó bằng cách gói ContentPresenter trong Border với nền trong suốt. Bằng cách đó, bạn có thể tạo một nút trống / trong suốt có kích thước bất kỳ để đặt trên một hình ảnh.
bj0

3

Bạn có thể sử dụng Hyperlink thay vì Nút, như thế này:

        <TextBlock>
            <Hyperlink TextDecorations="{x:Null}">
            <Image Width="16"
                   Height="16"
                   Margin="3"
                   Source="/YourProjectName;component/Images/close-small.png" />
            </Hyperlink>
        </TextBlock>

2

Bạn có thể đã biết rằng việc đặt Nút của bạn bên trong ToolBar sẽ mang lại cho bạn hành vi này, nhưng nếu bạn muốn thứ gì đó sẽ hoạt động trên TẤT CẢ các chủ đề hiện tại với bất kỳ loại dự đoán nào, bạn sẽ cần tạo một ControlTemplate mới.

Giải pháp của Prashant không hoạt động với Nút không nằm trên thanh công cụ khi Nút có tiêu điểm. Nó cũng không hoạt động 100% với chủ đề mặc định trong XP - bạn vẫn có thể thấy các viền màu xám mờ khi Nền chứa của bạn có màu trắng.


1

Lập trình, bạn có thể làm điều này:

btn.BorderBrush = new SolidColorBrush(Colors.Transparent);

1
Tôi không nghĩ rằng điều này có thể hữu ích, vì anh ta đang tìm kiếm một giải pháp về phía XAML
Mohamed Kamel Bouzekria 18/03/19

-1

Tại sao bạn không đặt cả hai Background & BorderBrushgiống nhaubrush

 <Style TargetType="{x:Type Button}" >
        <Setter Property="Background" Value="{StaticResource marginBackGround}"></Setter>
        <Setter Property="BorderBrush" Value="{StaticResource marginBackGround}"></Setter>            
 </Style>

<LinearGradientBrush  x:Key="marginBackGround" EndPoint=".5,1" StartPoint="0.5,0">
    <GradientStop Color="#EE82EE" Offset="0"/>
    <GradientStop Color="#7B30B6" Offset="0.5"/>
    <GradientStop Color="#510088" Offset="0.5"/>
    <GradientStop Color="#76209B" Offset="0.9"/>
    <GradientStop Color="#C750B9" Offset="1"/>
</LinearGradientBrush>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.