WPF STILE: non riesco a cambiare sfondo del pulsante?

Ho cercato di cambiare background di un pulsante quando un altro pulsante cliccato.

non posso farlo se ho fornendo stile di pulsante.

Vedere il mio codice qui sotto.

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="Button" x:Key="TransparentButton">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border  CornerRadius="2,2,2,2"  HorizontalAlignment="Center" x:Name="borderTemplate" Background="Transparent">
                            <ContentPresenter/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter TargetName="borderTemplate"  Property="Border.BorderBrush" Value="Gray" />
                                <Setter TargetName="borderTemplate"  Property="Border.BorderThickness" Value="1" />
                            </Trigger>
                            <Trigger Property="IsPressed" Value="true">
                                <Setter TargetName="borderTemplate"  Property="Border.BorderBrush" Value="Lime" />
                            </Trigger>
                            <Trigger Property="IsFocused" Value="true">
                                <Setter TargetName="borderTemplate"  Property="Border.Background" Value="#FD7" />
                            </Trigger>

                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="borderTemplate"  Property="Border.Background" Value="LightGray"></Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="Button" Style="{StaticResource TransparentButton}" Height="23" HorizontalAlignment="Left" Margin="20,25,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="143,177,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
    </Grid>
</Window>

MainWindow.xaml.cs

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //This doesn't work if i providing style to button  ==> Style="{StaticResource TransparentButton}"
            button1.Background = Brushes.Red;
        }
    }

Grazie…..

Il tuo stile definisce Background=”Transparent”
possibile duplicato di SyleProblem: non riesco a Cambiare Sfondo Del pulsante in questione ??????

OriginaleL’autore Aryan SuryaWansi | 2011-07-20

3 Replies
  1. 16

    Ho già risposto in la domanda

    Tuo stile re-scrive il Pulsante ControlTemplate, in modo che il colore di Sfondo non è più utilizzato

    Il pulsante di Default template simile a questo:

    <Button Background="SomeColor">
        <Button.Content>
    </Button>

    E si sono overwritting il modello di dire

    <Border>
        <Button.Content>
    </Border>

    Cambiare la tua ControlTemplate per

    <Border Background="{TemplateBinding Background}">
        <Button.Content>
    </Border>

    e funzionerà

    Ok, ma la prossima volta si prega di lasciare un commento chiedendo chiarimenti, se non si capisce una risposta, o modificare la tua domanda originale per rendere più semplice invece di ri-postare la stessa domanda.

    OriginaleL’autore Rachel

  2. 1

    Sembra uno stile che è definito nel modello (Background="Transparent") ha sempre la precedenza su un valore che ci hai fornito dal codice dietro. Tenta di rimuoverlo dal XAML e definire in un costruttore come sfondo predefinito di un pulsante. Solo per controllare.
    In generale, io non suggerisco di fare in codice dietro, spostare tale logica in XAML invece.

    OriginaleL’autore sll

  3. 1

    Su questa linea:

    <Border  CornerRadius="2,2,2,2"  HorizontalAlignment="Center" x:Name="borderTemplate" Background="Transparent">

    È correggere lo Sfondo del pulsante trasparente. Non è più legata alla proprietà di Sfondo del pulsante di controllo in modo da cambiare la proprietà non è più propaga verso il basso per lo stile.

    Se si utilizza un “TemplatedParent” l’associazione vi permetterà di ripristinare il collegamento tra il controllo e lo stile – come questo:

    <Border  CornerRadius="2,2,2,2"  HorizontalAlignment="Center" x:Name="borderTemplate" Background="{Binding  RelativeSoure={RelativeSource TemplatedParent}, Path=Background}">

    E quindi è possibile impostare lo sfondo del pulsante:

    <Button Name="button1" Background="Transparent" ..... />

    OriginaleL’autore Martin Harris

Lascia un commento