Прозрачный фон кнопки в WPF с использованием стиля

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

решение в ссылке, которую я вставил <Window.Resources>...</Window.Resources>:

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Green"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

источник: как изменить фон для кнопки мыши в WPF?

Как отредактировать этот код, чтобы я мог использовать его, чтобы установить фон моей кнопки прозрачным, а не его границу?

4 ответов


попробуйте этот фрагмент для прозрачной кнопки:

<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" BorderThickness="0">
    <-- PUT BUTTON CONTENT HERE e.g. a Image -->
</Button>

измените эту строку

<Setter Property="Background" Value="Red"/>

to

<Setter Property="Background" Value="Transparent"/>

найдено решение для моей проблемы:

по-видимому, вам нужно добавить триггеры в ControlTemplate под ControlTemplate.Спусковой крючок. Andd после того, как вы сделали это, вещь с границами заключается в том, что вы должны установить имя цели в теге границы, а затем установить ссылку (-> TargetName="XXXXX") на свойства, которые вы назвали в теге границы.

Так:

<Window.Resources>
<Style x:Key="MenuButton" TargetType="Button">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Height" Value="40" />
    <Setter Property="Width" Value="Auto" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Margin" Value="45,0,0,0" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                <Border Name="MenuBorder" SnapsToDevicePixels="True" BorderBrush="Black" Background="{TemplateBinding Background}" BorderThickness="0,0,0,2" >
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="Button.IsFocused" Value="True">
                        <Setter Property="Background" Value="Transparent"/>
                        <Setter TargetName="MenuBorder" Property="BorderBrush" Value="#FFED6A2B" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


используйте это в коде C#

Button btn = new Button() {BorderBrush=System.Windows.Media.Brushes.Transparent, 
                               BorderThickness = new Thickness(0)};

или

yourBtn.BorderBrush=System.Windows.Media.Brushes.Transparent;
yourBtn.BorderThickness =new Thickness(0);