WPF Xaml 응용 프로그램에서 작업하고 있습니다. 이 앱에는 특정 기준에 따라 가시성을 변경해야하는 다양한 스택 패널 (아이콘처럼 동작하는)이 있습니다.XAML 모든 자식 요소 축소
질문 : 모든 하위 요소 (스택 패널)를 어떻게 축소 할 수 있습니까? vb.net의 백엔드에서 각각 하나씩 축소 중입니다. 그러나 오히려 그 모든 것을 한 번에 할 수있는 멋진 방법을 찾아야합니다.
WPF Xaml 응용 프로그램에서 작업하고 있습니다. 이 앱에는 특정 기준에 따라 가시성을 변경해야하는 다양한 스택 패널 (아이콘처럼 동작하는)이 있습니다.XAML 모든 자식 요소 축소
질문 : 모든 하위 요소 (스택 패널)를 어떻게 축소 할 수 있습니까? vb.net의 백엔드에서 각각 하나씩 축소 중입니다. 그러나 오히려 그 모든 것을 한 번에 할 수있는 멋진 방법을 찾아야합니다.
두 가지 옵션
을 가질 수:
이미지를 표시하기 위해 사용되는 타겟 유형 아래 스타일 쓰기
기본적으로<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>
텍스트 상자를 사용하면 백엔드 코드에서 검색을 기반으로 그것을 볼 수 있습니다 축소 할 것
사용자 지정 컨트롤 :
이 이제까지 당신의 표시 사용을 제어하는 것에 대해 단지 래퍼 될 것입니다 아이콘은 하나의 변경만으로 기본 표시가 축소됩니다. 그런 다음 당신은 이제까지 당신이
무시하려는 기본 값으로 속성이
BooleanToVisibilityConverter
과 같은 IValueConverter
구현을 사용하여 바인딩합니다.
충분하지 않다면 하나씩 수행해야합니다. 어쩌면 사용자 정의 동작을 작성할 수 있습니까?
당신은 당신에서 각 컨트롤 예를
<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>
실제로 작동하지 않습니다. WrapPanel을 숨기면 내부의 아이콘이 자동으로 숨겨집니다. 하지만 WrapPanel을 계속 표시하여 나중에 표시 할 아이콘과 숨길 항목을 선택할 수 있습니다. 그것의 전부 또는 쇼 없음 거래를 묶는 상태에서. 내가 잘못? – CogentP
예를 들어 귀하의 요구 사항을 설명해 주시겠습니까? 그렇다면 실제 무엇을하려고하는지 쉽게 이해할 수 있습니다. – Kumareshan
확인. 나는 WrapPanel 아이콘이 잔뜩있다. 사용자 쿼리와 관련된 아이콘 만 표시하는 유니버설 검색 필드를 만듭니다. 이렇게하려면 먼저 모든 아이콘을 숨기고 나중에 필요한 아이콘을 표시해야합니다. 한 번에 모든 아이콘을 숨기고 있으므로 코드 작성을 줄여야합니다. – CogentP
그 매개 변수 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 ... 함수를 작성하면 안됩니다. 이 방법을 사용하면 논리를 한 곳에서 확인할 수 있습니다.
괜찮 았어, 내가 뭘 마음에 있었는지는 모르겠지만, 나는 여기서부터 선택할 수 있다고 생각한다. 당신의 아이디어는 모든 텍스트 상자를 무너 뜨릴 것입니까? 내가 숨기고 자하는 요소에 키를 추가하려고 시도하고, xaml이 숨겨진 부분을 처리하게합니다. 당신의 도움을 주셔서 감사합니다 – CogentP