Как убрать рамку у кнопки windows forms

Обновлено: 06.07.2024

Я пытаюсь создать кнопку с изображением и без рамки - точно так же, как кнопки панели инструментов Firefox, прежде чем вы наведете на них курсор и увидите кнопку полностью.

Я попытался установить BorderBrush до Transparent , BorderThickness к 0 , а также пытались BorderBrush="" , но вы все еще можете увидеть контур кнопки.

Кнопка без полей в WPF? . Как вы думаете, что это за интуитивно понятный UI-фреймворк . Фантастика! Любое другое решение, которое я нашел, чрезвычайно запутано и включает в себя переопределение всего стиля кнопки. К сожалению, это отключает эффект установки HorizontalContentAlignment на Stretch . Это превращает мою кнопку в переключатель. Когда я нажимаю кнопку, она остается выбранной, пока я не нажму другую кнопку. Как я могу заставить его так себя вести? Если бы я мог, я бы проголосовал за это дважды. Мне удалось сэкономить много кода, чтобы получить желаемый вид.

Возможно, вам придется изменить шаблон кнопки, это даст вам кнопку без рамки, но также без какого-либо нажатия или отключенного эффекта:

Я не знаю, почему другие решения работают на других людей. Это единственное решение, которое может работать, потому что линия ContentPresenter Border также удалена! Хорошая работа! Я пробовал несколько других решений, это единственный работает. кстати, для новичков код <style> </style> должен быть в заголовке вашего xaml, как в <Window><Window.Resource> <Style> . также в ответе есть опечатка: <Button Style=""/> должно быть <Button Style=""/>

Что вам нужно сделать, это примерно так:

Надеюсь, это то, что вы искали.

Изменить: извините, забыл упомянуть, что если вы хотите видеть границу кнопки при наведении курсора на изображение, все, что вам нужно сделать, это пропустить Padding = "- 4" .

Это работает, и в некоторых случаях это очень хорошая идея Это отлично работает, когда вы хотите растянуть изображение внутри кнопки. Удаление отступа позволяет изображению занимать все размеры кнопки.

Я не знаю, почему другие не указали, что этот вопрос дублируется с этим с принятым ответом .

Привожу здесь решение: Вам нужно переопределить ControlTemplate из Button :

Вы можете использовать гиперссылку вместо кнопки, например:

Возможно, вы уже знаете, что размещение Button внутри ToolBar дает вам такое поведение, но если вы хотите что-то, что будет работать во ВСЕХ текущих темах с какой-либо предсказуемостью, вам необходимо создать новый ControlTemplate.

Решение Prashant не работает с кнопкой не на панели инструментов, когда кнопка находится в фокусе. Он также не работает на 100% с темой по умолчанию в XP - вы все еще можете видеть слабые серые границы, когда ваш контейнер Background белый.

Программно вы можете сделать это:

Я не думаю, что это может быть полезно, так как он ищет решение на стороне XAML,

Почему бы вам не установить оба Background & BorderBrush одинаковых brush

https://drive.google.com/file/d/0B4XV2HrbrpDZX0xnZ1o1SHhiWm8/view?usp=drivesdk

Я хотел бы удалить выделение после каждого щелчка, потому что я установил acceptbutton и ActiveControl на кнопку " equal " этой программы. Я хочу, чтобы операция AcceptButton имела место вместо ввода выделенного текста кнопки, когда я нажимаю клавишу Enter на клавиатуре, Есть идеи? Благодарю.

Вот решение:

Случается, что кнопка принимает фокус ввода после его нажатия, как и любой другой элемент управления, когда вы нажимаете на него.

И то, как Windows указывает, что элемент управления имеет фокус ввода (по крайней мере, под темой Aero), имеет тонкую синюю подсветку.

В частности, для управления кнопками, когда у него есть фокус ввода, просто нажатие клавиши Enter будет "нажимать" эту кнопку. Вот почему сохранение подсветки очень важно, так что пользователь знает, чего ожидать.

Лучшим решением является установка фокуса на другой элемент управления в вашем окне сразу же после нажатия пользователем кнопки. Таким образом, он больше не будет автоматически подсвечен, и никакие действия не будут автоматически активированы, когда пользователь нажимает клавишу Enter . (Это реальная проблема юзабилити, которую вы пытаетесь решить, даже если вы еще этого не знаете. Ничто не более запутывает, чем кнопку, случайно нажимая кнопку, когда пользователь на самом деле пытается что-то ввести).

Вы можете не допустить, чтобы кнопка вообще получала фокус, установив для свойства Focusable значение false, но я бы очень рекомендовал против этого. Как только вы это сделаете, пользователь не сможет "нажать" кнопку, используя только клавиатуру. Хорошо разработанные приложения всегда должны быть доступны пользователям, которые либо предпочитают, либо не могут использовать мышь.

Учитывая, что вы "хотите, чтобы операция AcceptButton место вместо ввода выделенного текста кнопки, когда я нажимаю клавишу Enter на клавиатуре". Одно из решений заключается в том, чтобы обработчик кликов для каждой кнопки фокусировался на = .

Google "winforms control set focus" для деталей кода.

Это сохранит доступность: пользователи с клавиатурой могут Tab на желаемую кнопку, нажмите Enter , чтобы "щелкнуть" кнопку. Затем ваш обработчик щелчка будет фокусироваться на = , поэтому будет ясно, что другой Enter выполнит действие = .

Он также дает понять любому пользователю, что они могут нажать Enter в любое время, чтобы получить = .

С другой стороны, это может быть "обескураживающим" для пользователей, чтобы постоянно видеть = . Требуется тестирование пользователей.

Читайте также: