WPF Pulsante IsEnabled Basato sulla ComboBox di Selezione di Sovrascrivere stile predefinito

Ho un Pulsante che è in cerca di 2 combobox per assicurarsi che essi hanno un valore prima di essere attivato. Il problema è il modo in cui sto facendo è di sovrascrivere lo stile di default dichiarato nel mio tema di progetto.

<Button x:Name="btnOK" VerticalAlignment="Center" Content="OK" IsDefault="True"  Margin="0" Click="btnOK_Click">
                    <Button.Style>
                      <Style BasedOn="{StaticResource DefaultButton}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding ElementName=ddlWageTypes, Path=SelectedItem}" Value="{x:Null}">
                                    <Setter Property="Button.IsEnabled" Value="false"/>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding ElementName=ddlJobTitles, Path=SelectedItem}" Value="{x:Null}">
                                    <Setter Property="Button.IsEnabled" Value="false"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>
                </Button>

Ho provato ad aggiungere BasedOn=”{StaticResouce MyDefaultButtonStyleName}” tag style, ma si fa saltare in aria in fase di runtime.

L’errore è “Sistema”.Windows.Per stile’ valore non può essere assegnata la proprietà ‘Stile’ dell’oggetto ‘del Sistema.Windows.Controlli.Il tasto’. Solo su una base in Stile con il tipo di target che è il tipo di base ‘IFrameworkInputElement’. Errore in oggetto.Windows.Per stile’ nel file di markup”

C’è stato a fare questo in XAML senza sovrascrivere stile predefinito.

EDIT: Esempio di Codice Aggiornato.
Ho un errore su OKButtonStyle dicendo “Impossibile aggiungere elementi di proprietà di “Risorse”, perché la proprietà può avere solo un elemento secondario se si utilizza un esplicito collezione di tag. Errore in oggetto.Windows.Per stile’ nel file di markup “

<UserControl x:Class="UK.Budgeting.XBAP.ShiftDiff.NewFTEPremiumPaySummary"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:compModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    xmlns:local="clr-namespace:UK.Budgeting.XBAP.ShiftDiff">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="CellTemplates.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

      <Style TargetType="{x:Type Button}" x:Key="OKButtonStyle" BasedOn="{StaticResource DefaultButton}">
        <Style.Triggers>
          <DataTrigger Binding="{Binding ElementName=ddlWageTypes, Path=SelectedItem}" Value="{x:Null}">
            <Setter Property="Button.IsEnabled" Value="false"/>
          </DataTrigger>
          <DataTrigger Binding="{Binding ElementName=ddlJobTitles, Path=SelectedItem}" Value="{x:Null}">
            <Setter Property="Button.IsEnabled" Value="false"/>
          </DataTrigger>
        </Style.Triggers>
      </Style>

    </UserControl.Resources>
    <Grid>
        <Rectangle Style="{StaticResource DialogRectangle}"/>
        <Border Style="{StaticResource DialogBorder}">
            <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Background="White">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition Width="5"/>
                    <ColumnDefinition MinWidth="300"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Height="2"/>
                    <RowDefinition/>
                    <RowDefinition Height="2"/>
                    <RowDefinition/>
                    <RowDefinition Height="2"/>
                    <RowDefinition/>
                </Grid.RowDefinitions>

                <TextBlock Grid.Column="0" Grid.Row="0" Style="{StaticResource LabelStyle}">Wage Type</TextBlock>
                <TextBlock Grid.Column="0" Grid.Row="2" Style="{StaticResource LabelStyle}">Job Title</TextBlock>

                <ComboBox x:Name="ddlWageTypes" VerticalAlignment="Top" Grid.Column="2" Grid.Row="0"
                          DisplayMemberPath="DisplayName"
                          SelectedValuePath="WageTypeCode"/>
                <ComboBox x:Name="ddlJobTitles" VerticalAlignment="Top" Grid.Column="2" Grid.Row="2"
                          DisplayMemberPath="JobTitle"
                          SelectedValuePath="JobCode"/>

                <StackPanel Grid.Column="2" Grid.Row="6" VerticalAlignment="Top" Orientation="Horizontal" Margin="5">
                  <Button x:Name="btnOK" VerticalAlignment="Center" Content="OK" IsDefault="True"  Margin="0" Click="btnOK_Click" Style="{StaticResource OKButtonStyle}"/>
                    <Button x:Name="btnCancel" VerticalAlignment="Center" Content="Cancel" IsCancel="True" Margin="10,0,0,0" Click="btnCancel_Click"/>
                </StackPanel>
            </Grid>
        </Border>
    </Grid>
</UserControl>
Si potrebbe anche indicarci la definizione per OKButtonStyle?
Lo stile all’interno del Pulsante.Le esigenze di stile di un TargetType.

OriginaleL’autore Nate | 2008-12-16

One Reply
  1. 9

    Come è

    BasedOn="{StaticResouce DefaultButton}"

    dovuto far riferimento al pulsante di default stile? Questo si blocca perché DefaultButton è un indefinito risorsa nell’app.

    Dovrebbe essere:

    BasedOn="{StaticResource {x:Type Button}}"

    EDIT: Scusa, ha risposto troppo in fretta.

    Ho notato ora il tuo pulsante Style= {}, e fa riferimento a uno stile chiamato OkBUttonStyle. Questo è lo stile che deve definire tutto e di essere basato sul pulsante predefinito stile. Da tutto ciò, posso includere tali trigger. Quello che stai dicendo in XAML è che lo Stile è il Contenuto del tuo Pulsante.

    Alcuni, forse, codice:

     <Window x:Class="WindowsApplication7.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WindowsApplication7" Height="300" Width="300"
        >
      <Window.Resources>
        <Style TargetType="{x:Type Button}" x:Key="defaultButtonStyle">
          <Setter Property="Background" Value="Red" />
        </Style>
    
        <Style TargetType="{x:Type Button}" x:Key="okButtonStyle" BasedOn="{StaticResource defaultButtonStyle}">
          <Setter Property="Foreground" Value="Green" />
          <Style.Triggers>
            <Trigger Property="IsEnabled" Value="True">
              <Setter Property="Background" Value="Yellow" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
              <Setter Property="Foreground" Value="Blue" />
            </Trigger>
          </Style.Triggers>
        </Style>
      </Window.Resources>
      <StackPanel>
        <Button>System default</Button>
        <Button Style="{StaticResource defaultButtonStyle}">My Default</Button>
        <Button Style="{StaticResource okButtonStyle}">Ok</Button>
        <Button Style="{StaticResource okButtonStyle}" IsEnabled="False">Ok disabled</Button>
      </StackPanel>
    </Window>
    BasedOn=”{StaticResouce DefaultButton}” è uno stile istanza basata su x:Tipo di Pulsante di ex: <Stile x:Key=”DefaultButton” TargetType=”{x:Tipo di Pulsante}”>….</Stile>
    mi dispiace che sei, il OKButtonStyle era un altro percorso che ho fatto, cercando di capire questo fuori. Ho preso lo stile da all’interno del pulsante, aggiunto alle mie risorse e poi ha cercato di basare che sul DefaultButton ma che esplode con un errore diverso.

    OriginaleL’autore Szymon Rozga

Lascia un commento