2017-02-03 1 views
2

Ich habe ein WPF-Fenster, das nur eine ComboBox (Dropdown-Liste) hat. Wenn ich Index 1 (zweites Element in der Dropdown-Liste) wähle, wie kann ich dieses WPF-Fenster so erweitern, dass mehr Schaltflächen, Textfelder usw. angezeigt werden? Müsste ich die selectedIndex-Eigenschaft verwenden? Wenn ja, wie mache ich das Fenster in XAML erweitern.Wie erweitert man ein WPF-Fenster für eine bestimmte Bedingung?

Antwort

1

Ich habe in der Vergangenheit eine IValueConverter verwendet, um dies zu erreichen. Hier ist ein Beispiel Konverter:

public class MyConverter : System.Windows.Data.IValueConverter { 

    public object Convert (object value , Type targetType , object parameter , CultureInfo culture) { 

     if (value == null) 
      return System.Windows.Visibility.Hidden; 

     if (parameter == null) 
      return System.Windows.Visibility.Hidden; 

     if (value.ToString().Equals (parameter)) 
      return System.Windows.Visibility.Visible; 

     return System.Windows.Visibility.Hidden; 
    } 

    public object ConvertBack (object value , Type targetType , object parameter , CultureInfo culture) { 
     throw new NotImplementedException (); 
    } 
} 

Was das bedeutet, es nimmt den Wert, der an sie übergeben wird, erwarte ich eine Reihe wie die SelectedIndex eines Artikel Kontrolle. Ich vergleiche es dann mit dem übergebenen Parameter. Wenn sie gleich sind, gebe ich Visibility.Visible zurück. In allen anderen Fällen gebe ich Visibility.Hidden zurück.

Jetzt können Sie das nehmen und es in die XAML wie dieser Stecker:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <local:MyConverter x:Key="vConv"/> 
    </Window.Resources> 
    <Grid> 
     <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="25,52,0,0" VerticalAlignment="Top" Width="120"> 
      <ComboBoxItem>Hidden</ComboBoxItem> 
      <ComboBoxItem>Visible</ComboBoxItem> 
     </ComboBox> 

     <Label x:Name="label" Content="Label" HorizontalAlignment="Left" Margin="219,92,0,0" VerticalAlignment="Top" Visibility="{Binding ElementName=comboBox, Path=SelectedIndex, Converter={StaticResource vConv}, ConverterParameter=1, UpdateSourceTrigger=PropertyChanged}"/> 

    </Grid> 
</Window> 

Sie können sehen, dass wir eine Instanz unserer MyConverter Klasse in den Window.Resources erstellt. Wenn wir dies in unserer Bindung verwenden, können wir meine Beschriftung basierend auf dem ausgewählten Index anzeigen/ausblenden. Jetzt ist dies sehr einfach und Sie können eine Menge hinzufügen, um alle Funktionen zu bekommen, die Sie benötigen, damit Sie beginnen können.

+0

Statt des großen weißen leeren Raum in der linken Seite, ist es eine Möglichkeit, das Fenster tatsächlich zu vergrößern, um es zu erweitern? Zum Beispiel, wenn das Fenster ursprünglich 100 mal 100 war und ein Combo-Element angeklickt wurde, kann ich das Fenster auf 100 um 300 ändern? – tralifa

+0

@tralifa Sie müssen über Storyboard und Animationen in WPF für das lesen. – niksofteng

1

Sie können die Eigenschaft MaxHeight und MaxWidth des Fensters für die Auswahl des Elements comboBox verwenden. Wie folgt aus:

On Selection Change-Ereignis von combobox.Use dieses

MainWindow obj= new MainWindow(); 
if(mycombobox.SelectedIndex==0) 
    { 
     obj.MaxWidth="600"; 
     obj.MinWidth="600"; 
    } 
if(mycombobox.SelectedIndex==1) 
    { 
     obj.MaxWidth="200"; 
     obj.MinWidth="200"; 
    } 

oder Sie können auch dieses tun

if(mycombobox.SelectedIndex==0) 
     { 
      this.MaxWidth="600"; 
      this.MinWidth="600"; 
     } 
    if(mycombobox.SelectedIndex==1) 
     { 
      this.MaxWidth="200"; 
      this.MinWidth="200"; 
     } 
Verwandte Themen