2009-06-15 4 views
109

Я пытаюсь создать кнопку с изображением в ней и без границ - точно так же, как кнопки панели инструментов Firefox, прежде чем нависнуть над ними и увидеть полную кнопку.Как вы полностью удаляете границу кнопки в wpf?

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

+1

альт ** [ответ] (http://stackoverflow.com/a/ 7770227/503501) ** –

+0

Кнопка без полей в WPF? !!! Как вы думаете, это интуитивно понятный интерфейс? –

ответ

2

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

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

217

Попробуйте

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

Фантастический! Каждое другое решение, которое я нашел, чрезвычайно изогнуто и включает в себя отмену всех стилей кнопки. – Jonathan

+7

К сожалению, это отключает эффект установки 'HorizontalContentAlignment' на' Stretch'. –

+0

В нем говорится: «x: Static не поддерживается в проекте Silverlight." –

22

То, что вы должны сделать что-то вроде этого:

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

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

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

+13

Это просто doesn ' t Работа – Thiru

+1

Это работает, и в некоторых случаях это очень хорошая идея. – curiousity

+0

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

3

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

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

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

Привожу здесь решение: Вам нужно переопределить ControlTemplate в 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

Если вы не ставите любой контент внутри кнопки не будет отвечать на клики. x, который заверяет, что ContentPresenter в Границе с прозрачным фоном. Таким образом, вы можете сделать пустую/прозрачную кнопку любого размера для размещения над изображением. – bj0

36

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

<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> 

и кнопки:

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

Я не знаю, почему другие решения, похоже, работают на других людей. Это решение единственное, что может работать, потому что линия ContentPresenter Border также удалена! Хорошая работа! – Nasenbaer

+1

Я пробовал несколько других решений, это единственное, что работает. btw, для новичков, код