2013-12-09 17 views
6

Ho un'applicazione WPF che contiene una griglia. La griglia è suddivisa in 3 colonne con la terza griglia con larghezza nulla al momento del caricamento.WPF DataTrigger da visualizzare e nascondere la colonna griglia XAML

ho due DataGrid nelle altre due colonne. Quando l'elemento selezionato in uno dei datagrid cambia l'altro datagrid cambia i valori di visualizzazione, cioè un modello di dettaglio principale. Tutto funziona bene.

C'è un valore nel datagrid che se selezionata Vorrei che questo 3 ° colonna cambia la sua larghezza da zero a 2 *. Non so come farlo?

desidero raggiungere questo obiettivo attraverso XAML. Ho cercato i convertitori di valori dei trigger di dati &. Ho scritto del codice qui sotto velocemente per testare. Ho letto che impostando la colonna su width = 0 c'è probabilmente più alto nella lista di precedenza delle proprietà delle dipendenze. C'è comunque qualcosa da fare o dovrò usare il codice?

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="2*"/> 
     <ColumnDefinition Width="0"/> 
    </Grid.ColumnDefinitions> 

    <DataGrid Grid.Column="0" 
       ItemsSource="{Binding OrderList}" 
       SelectedItem="{Binding OrderSelected}"     
       AutoGenerateColumns="True">          
    </DataGrid> 

    <TextBox Grid.Column="1" Text="{Binding OrderSelected.Name}"> 
    </TextBox> 

    <Grid x:Name="columnHideSeek" Grid.Column="2" Background="Blue"> 
     <Grid.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding OrderSelected.Name}" Value="Mark"> 
         <Setter Property="Grid.Width" Value="10"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Grid.Style> 
    </Grid> 

</Grid> 
+1

avrei visibilità dell'utente su larghezza – Paparazzi

+0

sarà che effettuano la dimensione delle altre colonne quando non è visibile? – mHelpMe

+0

Ho messo la visibilità a compresso e provato nascosto. Tuttavia, nulla sembra accadere. La terza colonna sembra avere ancora un effetto sulla dimensione delle altre due colonne – mHelpMe

risposta

17

Utilizzando il numero corretto DataTrigger, questo è totalmente possibile. In primo luogo, aggiungere il Trigger al elemento dell'interfaccia utente che si desidera modificare il ... ColumnDefinition, non il Grid:

<ColumnDefinition> 
    <ColumnDefinition.Style> 
     <Style TargetType="{x:Type ColumnDefinition}"> 
      <Setter Property="Width" Value="10" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding OrderSelected.Name}" Value="Mark"> 
        <Setter Property="Width" Value="2*" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ColumnDefinition.Style> 
</ColumnDefinition> 

Avanti, non impostare il Width sull'elemento ColumnDefinition, ma invece la Style. Altrimenti il ​​Width sull'elemento ColumnDefinition sostituirà il valore impostato dal DataTrigger.

+0

grazie ancora una volta! perfezionare! – mHelpMe

+0

Mi hai salvato la giornata! – GreenEyedAndy

Problemi correlati