2017-02-03 5 views
2

У меня есть окно WPF, у которого есть только ComboBox (выпадающий список). Если я выберу индекс 1 (второй элемент в раскрывающемся списке), как я могу расширить это окно WPF, чтобы показать больше кнопок, текстовое поле и т. Д.? Должен ли я использовать свойство selectedIndex? Если да, то как сделать окно расширяться в XAML.Как расширить окно WPF для определенного условия?

ответ

1

В прошлом я использовал IValueConverter, чтобы выполнить это. Вот пример преобразователь:

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 (); 
    } 
} 

Что это делает, она принимает значение, которое передается ему, я ожидал несколько таких, как SelectedIndex элемента управления элементами. Затем я сравниваю его с переданным параметром. Если они равны, я возвращаю Visibility.Visible. Во всех остальных случаях я возвращаю Visibility.Hidden.

Теперь вы можете принять, что и вставить его в XAML как это:

<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> 

Вы можете видеть, что мы создали экземпляр нашего класса MyConverter в Window.Resources. Когда мы используем это в нашей привязке, мы можем показать/скрыть мой ярлык на основе любого индекса. Теперь это очень просто, и вы можете добавить много для этого, чтобы получить всю необходимую функциональность, и это должно начаться.

+0

Вместо огромного белого пустого пространства в левом, есть способ фактического изменения размера окна? Например, если окно было изначально 100 на 100, и был выбран комбо-элемент, могу ли я изменить окно на 100 на 300? – tralifa

+0

@tralifa Для этого вам нужно прочитать о Storyboard and Animations в WPF. – niksofteng

1

Вы можете использовать свойство окна MaxHeight и MaxWidth в окне выбора объекта comboBox. Как это:

О выборе Изменить событие combobox.Use это

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

или вы также можете сделать это

if(mycombobox.SelectedIndex==0) 
     { 
      this.MaxWidth="600"; 
      this.MinWidth="600"; 
     } 
    if(mycombobox.SelectedIndex==1) 
     { 
      this.MaxWidth="200"; 
      this.MinWidth="200"; 
     } 
Смежные вопросы