2013-12-17 3 views
0

WPF Xaml 응용 프로그램에서 작업하고 있습니다. 이 앱에는 특정 기준에 따라 가시성을 변경해야하는 다양한 스택 패널 (아이콘처럼 동작하는)이 있습니다.XAML 모든 자식 요소 축소

질문 : 모든 하위 요소 (스택 패널)를 어떻게 축소 할 수 있습니까? vb.net의 백엔드에서 각각 하나씩 축소 중입니다. 그러나 오히려 그 모든 것을 한 번에 할 수있는 멋진 방법을 찾아야합니다.

답변

2

두 가지 옵션

을 가질 수
  1. 당신은
을 coustom 컨트롤을 생성합니다 (바인딩 경우에 당신은 MVVM를 다음과 같은 경우, 즉 작동하지 않습니다) 스타일을 통해 달성 할 수 스타일

:

이미지를 표시하기 위해 사용되는 타겟 유형 아래 스타일 쓰기

기본적으로
<Window.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="Visibility" Value="Collapsed"/> 
    </Style> 
    </Window.Resources> 
    <Grid> 
    <StackPanel> 
     <TextBox Height="26" Width="200" Name="text1"/> 
     <TextBox Height="26" Width="200" Name="text2"/> 
     <Button Height="26" Width="200" Click="Button_Click_2" /> 
    </StackPanel> 
    </Grid> 

텍스트 상자를 사용하면 백엔드 코드에서 검색을 기반으로 그것을 볼 수 있습니다 축소 할 것

사용자 지정 컨트롤 :

이 이제까지 당신의 표시 사용을 제어하는 ​​것에 대해 단지 래퍼 될 것입니다 아이콘은 하나의 변경만으로 기본 표시가 축소됩니다. 그런 다음 당신은 이제까지 당신이

무시하려는 기본 값으로 속성이

+0

괜찮 았어, 내가 뭘 마음에 있었는지는 모르겠지만, 나는 여기서부터 선택할 수 있다고 생각한다. 당신의 아이디어는 모든 텍스트 상자를 무너 뜨릴 것입니까? 내가 숨기고 자하는 요소에 키를 추가하려고 시도하고, xaml이 숨겨진 부분을 처리하게합니다. 당신의 도움을 주셔서 감사합니다 – CogentP

1

BooleanToVisibilityConverter과 같은 IValueConverter 구현을 사용하여 바인딩합니다.

충분하지 않다면 하나씩 수행해야합니다. 어쩌면 사용자 정의 동작을 작성할 수 있습니까?

1

당신은 당신에서 각 컨트롤 예를

<StackPanel> 
     <StackPanel Name="pane1"> 
      <Button Height="30" Width="200" Content="one" Click="Button_Click" /> 
     </StackPanel> 
     <StackPanel Name="panel2"> 
      <Button Height="30" Width="200" Content="two" Click="Button_Click_1" /> 
     </StackPanel> 
    </StackPanel> 

를 들어

에 끝을 다시 설정하는 대신 부모에 대한 가시성을 설정할 수 있습니다 대신 각 컨트롤의 StackPanel에 대한 가시성을 설정하는 로직을 작성

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     pane1.Visibility = Visibility.Collapsed; 
     panel2.Visibility = Visibility.Visible; 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     panel2.Visibility = Visibility.Collapsed; 
     pane1.Visibility = Visibility.Visible; 
    } 

다음 mvvm이 다음과 같이 스택 패널의 가시성 속성에 바인딩하는 경우

이 경우
<StackPanel> 
     <StackPanel Visibility="{Binding CanShowPanel1}"> 
      <Button Height="30" Width="200" Content="one" Click="Button_Click" /> 
     </StackPanel> 
     <StackPanel Visibility="{Binding CanShowPanel2}"> 
      <Button Height="30" Width="200" Content="two" Click="Button_Click_1" /> 
     </StackPanel> 
    </StackPanel> 
+0

실제로 작동하지 않습니다. WrapPanel을 숨기면 내부의 아이콘이 자동으로 숨겨집니다. 하지만 WrapPanel을 계속 표시하여 나중에 표시 할 아이콘과 숨길 항목을 선택할 수 있습니다. 그것의 전부 또는 쇼 없음 거래를 묶는 상태에서. 내가 잘못? – CogentP

+0

예를 들어 귀하의 요구 사항을 설명해 주시겠습니까? 그렇다면 실제 무엇을하려고하는지 쉽게 이해할 수 있습니다. – Kumareshan

+0

확인. 나는 WrapPanel 아이콘이 잔뜩있다. 사용자 쿼리와 관련된 아이콘 만 표시하는 유니버설 검색 필드를 만듭니다. 이렇게하려면 먼저 모든 아이콘을 숨기고 나중에 필요한 아이콘을 표시해야합니다. 한 번에 모든 아이콘을 숨기고 있으므로 코드 작성을 줄여야합니다. – CogentP

0

그 매개 변수 IValueConverter를 사용하는 가장 쉬운 방법을 붕괴 기존의 가시성을 숨길 수있는 그것을 볼 수 있습니다.

<StackPanel> 
     <StackPanel Visibility="{Binding TheQuery,Converter={StaticResource QueryConverter,ConverterParameter="MyFirstStackPanelVisible"}}"> 
     </StackPanel> 
     <StackPanel Visibility="{Binding TheQuery,Converter={StaticResource QueryConverter,ConverterParameter="MySecondStackPanelVisible"}}"> 
     </StackPanel> 
    </StackPanel> 


public class QueryConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     switch((string)parameter) 
     { 
      case "MyFirstStackPanelVisible" 
      bool result =CheckQueryCriteriaForFirstStackPanel(); 
      return Visibility.Visible or Visibility.Collapsed; 

      case "MySecondStackPanelVisible" 
      bool result =CheckQueryCriteriaForSecondStackPanel(); 
      return Visibility.Visible or Visibility.Collapsed; 
     } 
    } 

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

물론 모든 경우에 대해 CheckQueryCriteriaFor ... 함수를 작성하면 안됩니다. 이 방법을 사용하면 논리를 한 곳에서 확인할 수 있습니다.