2015-12-16 3 views
2

Im новый для C# и вам нужна небольшая помощь. Я пробовал поиск в Интернете, но безуспешно, поэтому я спрашиваю здесь. У меня есть форма WPF с командами. И я использую:свернуть все кнопки в классе

cmd_Button.Visibility = Visibility.Collapsed; 
cmd_Button.Visibility = visibility.Visible; 

Чтобы скрыть и показать кнопки при необходимости. Проблема в том, что у меня много кнопок, и мне приходится сворачивать все (кроме трех) при инициализации формы, и мне приходится сворачивать все, кроме тех, которые я хочу показать во всех событиях Click.

Мой вопрос: есть ли способ свернуть все кнопки в классе, в начале указанного класса, а затем показать те, которые я хочу показать с помощью visibility.visible?

Вот пример кода, который я использую:

XAML

<Button x:Name="cmd_Button1" Content="Button1" HorizontalAlignment="Left" Margin="15,96,0,0" VerticalAlignment="Top" Width="75" Click="cmd_Button1_Click"/> 

, а затем с #

public MainWindow() 
    { 
     InitializeComponent(); 

     //collapse buttons 

     cmd_Button1.Visibility = Visibility.Collapsed; 
     cmd_Button2.Visibility = Visibility.Collapsed; 
     cmd_Button3.Visibility = Visibility.Collapsed; 
} 

и

private void cmd_ShowButton2_Click(object sender, RoutedEventArgs e) 
{ 
    cmd_Button1.Visibility = Visibility.Collapsed; 
    cmd_Button3.Visibility = Visibility.Collapsed; 

    cmd_Button2.Visibility = Visibility.Visible; 
} 
+0

Вы можете создать стиль, чтобы установить видимость разрушилась в XAML. – user1672994

ответ

1

Вы можете создать стиль в ресурсе страницы, который определяет aults видимость кнопки разрушилась:

<UserControl.Resources> 
    <Style TargetType="Button"> 
     <Setter Property="Visibility" Value="Collapsed" />     
    </Style> 
</UserControl.Resources> 

Я хотел бы призвать вас, чтобы прочитать о MVVM, хотя. WPF намного чище и проще в использовании с использованием привязок MVVM, а не для управления элементами в коде.

+0

привет, спасибо за ваш ответ. Это похоже на отличное решение, но мне трудно помещать тег . Где я должен это поставить? Я поместил его в файл MainWindow.xaml, и я получил «свойство attach« Ресурсы »не было обнаружено при ошибке« пользовательский контроль »при попытке компиляции. – Thomas

+1

Если вы используете окно вместо Usercontrol, вместо этого вы должны использовать ''. Вы должны поместить его в свой компонент окна: ' ...' – Jose

0

Вы можете задать стиль с триггером, чтобы установить поведение группы кнопок (или UiElements в целом):

стиль кнопки (на Usercontrols.Resources):

<Style x:Key="CollapsableButtons" TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding CollapseButtonsBoolean}" Value="true"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Использование на ваш кнопки:

<Button Style="{StaticResource CollapsableButtons}"/> 

И, как сказал GazTheDestroyer, используя MVVM, определяют логическое значение в вашем DataContext, называется CollapseButtonsBoolean. Видимость ваших кнопок изменится в то же время, что и логическое.

+0

Привет, благодарю вас за ваш ответ. Не могли бы вы рассказать о том, как определить логическое значение в datacontext, называемом CollapseButtonsBoolean?Я понимаю логику, но я не уверен, как это сделать :) – Thomas

0

вы можете использовать

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
     { 
      if (depObj != null) 
      { 
       for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
       { 
        DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
        if (child != null && child is T) 
        { 
         yield return (T)child; 
        } 

        foreach (T childOfChild in FindVisualChildren<T>(child)) 
        { 
         yield return childOfChild; 
        } 
       } 
      } 
     } 

и вызвать

foreach (Button tb in FindVisualChildren<Button>(testWindow)) 
      { 
       tb.Visibility = Visibility.Collapsed; 
      } 

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:cef="clr-namespace:WpfApplication1" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="Window1" x:Name="testWindow" Height="300" Loaded="Window_Loaded" Width="300" WindowStyle="None"> 
    <Grid Background="White"> 
     <Button x:Name="but1" Content="but1"></Button> 
     <Button x:Name="but2" Content="but2"></Button> 
     <Button x:Name="but3" Content="but3"></Button> 


    </Grid> 
</Window> 
+0

OP сказал: «У меня много кнопок, и мне приходится сворачивать все (кроме трех)». Это похоже на то, что все кнопки рухнут. – Jose

Смежные вопросы